5

我有一个奇怪的问题,其中 ViewContext.RouteData.Values["action"] 在我的登台服务器上为空,但在我的开发机器(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.net mvc?尝试将 System.Web.Mvc 本地复制到登台服务器,看看是否可以修复它。(右键单击引用,选择属性,然后将 Copy Local 更改为 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

尝试使用大写字母

String currentController = ViewContext.RouteData.Values["Controller"].ToString(); String currentAction = ViewContext.RouteData.Values["Action"].ToString(); String currentID = ViewContext.RouteData.Values["ID"].ToString();

于 2010-01-11T15:57:04.333 回答
0

我无法解释为什么它在一个地方而不是另一个地方有效,但是:

  1. 您应该将代码分成几行,以确定什么是 null (var route = ViewContext.RouteData; var values = ...;) 等等。

  2. 你从哪里调用 CheckActiveClass?在什么时候?它位于哪里?ViewContext 并非总是随处可用。但是您会更好地了解 #1 之后不可用的内容。

詹姆士

于 2009-08-09T22:36:05.387 回答