【问题标题】:ViewContext.RouteData.Values["action"] is null on server... works fine on local machineViewContext.RouteData.Values["action"] 在服务器上为空......在本地机器上工作正常
【发布时间】:2010-11-18 03:29:04
【问题描述】:

我遇到了一个奇怪的问题,即 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:对象引用未设置为对象的实例。

感谢任何帮助。提前致谢。

【问题讨论】:

  • 您找到解决方案了吗?我现在也有类似的问题...
  • 不,我没有,我最终改变了逻辑和它的工作方式。

标签: c# asp.net asp.net-mvc routing asp.net-mvc-routing


【解决方案1】:

尝试使用大写字母

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

【讨论】:

    【解决方案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;
    }
    

    【讨论】:

    • 也许可以尝试以上方法:System.Web.Abstractions、System.Web.Extensions、System.Web.Mvc 和 System.Web.Routing?我认为这些是 asp.net 使用的四个参考。
    • 当我重新发布时,我对所有与 MVC 相关的 dll 进行了“复制本地”...所以这些以及其他一些常规的 asp.net dll 以防万一。我只是不明白为什么它会在开发服务器上运行而不是在登台服务器上运行。
    【解决方案3】:

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

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

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

    詹姆斯

    【讨论】:

    • 我在视图页面的代码隐藏中使用它。以及母版页的代码隐藏。我会分解它,看看它在哪里出错。这很奇怪,因为它可以在开发机器上运行,但不能在登台服务器上运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-07
    • 2011-11-11
    • 2015-08-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    相关资源
    最近更新 更多