2009-08-09 125 views
5

我有一个奇怪的问题,其中ViewContext.RouteData.Values [“action”]在我的登台服务器上为null,但在我的开发机器(asp.net开发服务器)上工作正常。ViewContext.RouteData.Values [“action”]在服务器上为空...在本地机器上正常工作

代码很简单:

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

我上ViewContext.RouteData.Values错误[ “行动”]行。错误是:

异常详细信息:System.NullReferenceException:未将对象引用设置为对象的实例。

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

+0

您是否找到任何解决方案?我现在有类似的问题... – 2010-09-07 12:16:58

+0

不,我没有,我最终改变了逻辑和它的工作方式。 – rksprst 2010-09-07 23:19:50

回答

2

你的开发和登台服务器上是否有不同版本的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; 
} 
+0

我刚刚用本地副本重新发布,并且我得到相同的错误... – rksprst 2009-08-09 21:18:41

+0

也许尝试上述:System.Web.Abstractions,System.Web.Extensions,System.Web.Mvc和System.Web.Routing?我认为这些是asp.net使用的四种引用。 – 2009-08-10 00:48:20

+0

当我重新发布时,我在所有MVC相关DLL上做了“复制本地”......所以这些加上一些其他常规的asp.net DLL以防万一。我只是不明白为什么它可以在dev上运行,而不是在分段服务器上运行。 – rksprst 2009-08-10 04:43:16

0

我不能,为什么它的工作原理同一个地方,而不是其他,而是说:

  1. 你应该向上突破码成几行搞清楚到底什么是空(VAR路线= ViewContext.RouteData; var values = ...;)等。

  2. 你从哪里调用CheckActiveClass?在什么时候?它位于哪里? ViewContext并不总是随处可见。但是你可以更好地了解#1后没有的东西。

詹姆斯

+0

我在视图的代码隐藏中使用它。以及主页的代码隐藏。 我会分解它,看看它的错误。这很奇怪,因为它在开发机器上工作,但不在登台服务器上。 – rksprst 2009-08-09 22:50:36

0

尝试使用大写

字符串currentController = ViewContext.RouteData.Values [ “控制器”]的ToString(); String currentAction = ViewContext.RouteData.Values [“Action”]。ToString(); String currentID = ViewContext.RouteData.Values [“ID”]。ToString();

相关问题