ViewContext.RouteData.Values[“action”] 在服务器上为空...在本地计算机上工作正常

发布于 2024-08-01 19:52:42 字数 568 浏览 6 评论 0原文

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

任何帮助表示赞赏。 提前致谢。

I'm having a weird issue where ViewContext.RouteData.Values["action"] is null on my staging server, but works fine on my dev machine (asp.net development server).

The code is simple:

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

I get the error on the ViewContext.RouteData.Values["action"] line. The error is:

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Any help is appreciated. Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

两个我 2024-08-08 19:52:42

您的开发服务器和登台服务器上是否有不同版本的 asp.net mvc? 尝试将 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;
}

Do you have different versions of asp.net mvc on your dev and staging servers? Try copying System.Web.Mvc locally to the staging server and see if that fixes it. (Right click on the reference, choose properties, and change Copy Local to true)

This may or may not help your situation, but here is a helper extension I stole from an MVC template on asp.net/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;
}
初见 2024-08-08 19:52:42

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

  1. 您应该将代码分成几行,以准确弄清楚什么是 null (var route = ViewContext.RouteData; var value = ... ;) 等

  2. 你在哪里调用 CheckActiveClass 从? 在什么时候? 它位于哪里? ViewContext 并不总是在任何地方都可用。 但是您将更好地了解 #1 之后哪些内容不可用。

詹姆士

I can't speak to why it works one place and not another, but:

  1. You should break the code up into several lines to figure out exactly what is null (var route = ViewContext.RouteData; var values = ...;), etc.

  2. Where are you calling CheckActiveClass from? At what time? Where's it located? ViewContext isn't always available everywhere. But you'll have a better idea of what's not available after #1.

James

离线来电— 2024-08-08 19:52:42

尝试使用大写

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

Try using capitals

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文