5

ステージングサーバーではViewContext.RouteData.Values["action"]がnullであるという奇妙な問題が発生していますが、開発マシン(asp.net開発サーバー)では正常に機能します。

コードは単純です:

public string CheckActiveClass(string actionName)
    {
        string text = "";
        if (ViewContext.RouteData.Values["action"].ToString() == actionName)
        {
            text = "selected";
        }
        return text;
    }

ViewContext.RouteData.Values["action"]行でエラーが発生します。エラーは次のとおりです。

例外の詳細:System.NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません。

どんな助けでも大歓迎です。前もって感謝します。

4

3 に答える 3

2

開発サーバーとステージングサーバーに異なるバージョンのasp.netmvcがありますか?System.Web.Mvcをステージングサーバーにローカルにコピーしてみて、それで修正されるかどうかを確認してください。(参照を右クリックし、プロパティを選択して、[ローカルコピー]をtrueに変更します)

これは状況に役立つ場合とそうでない場合がありますが、asp.net/mvcのMVCテンプレートから盗んだヘルパー拡張機能を次に示します。

/// <summary>
/// Checks the current action via RouteData
/// </summary>
/// <param name="helper">The HtmlHelper object to extend</param>
/// <param name="actionName">The Action</param>
/// <param name="controllerName">The Controller</param>
/// <returns>Boolean</returns>
public static bool IsCurrentAction(this HtmlHelper helper, string actionName, string controllerName)
{
    string currentControllerName = (string)helper.ViewContext.RouteData.Values["controller"];
    string currentActionName = (string)helper.ViewContext.RouteData.Values["action"];

    if (currentControllerName.Equals(controllerName, StringComparison.CurrentCultureIgnoreCase) && currentActionName.Equals(actionName, StringComparison.CurrentCultureIgnoreCase))
        return true;

    return false;
}
于 2009-08-09T21:07:54.363 に答える
0

ある場所で機能し、別の場所では機能しない理由について話すことはできませんが、

  1. null (var route = ViewContext.RouteData; var values = ...;) などを正確に把握するには、コードを複数の行に分割する必要があります。

  2. どこから CheckActiveClass を呼び出していますか? 何時に?それはどこにありますか?ViewContext は常にどこでも利用できるわけではありません。しかし、#1 の後に利用できないものについては、より良いアイデアが得られます。

ジェームズ

于 2009-08-09T22:36:05.387 に答える
0

大文字を使ってみる

String currentController = ViewContext.RouteData.Values["Controller"].ToString(); String currentAction = ViewContext.RouteData.Values["アクション"].ToString(); String currentID = ViewContext.RouteData.Values["ID"].ToString();

于 2010-01-11T15:57:04.333 に答える