ViewContext.RouteData.Values [“action”]在服务器上为空...在本地机器上正常工作
我有一个奇怪的问题,其中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:未将对象引用设置为对象的实例。
任何帮助表示赞赏。提前致谢。
你的开发和登台服务器上是否有不同版本的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;
}
我刚刚用本地副本重新发布,并且我得到相同的错误... – rksprst 2009-08-09 21:18:41
也许尝试上述:System.Web.Abstractions,System.Web.Extensions,System.Web.Mvc和System.Web.Routing?我认为这些是asp.net使用的四种引用。 – 2009-08-10 00:48:20
当我重新发布时,我在所有MVC相关DLL上做了“复制本地”......所以这些加上一些其他常规的asp.net DLL以防万一。我只是不明白为什么它可以在dev上运行,而不是在分段服务器上运行。 – rksprst 2009-08-10 04:43:16
我不能,为什么它的工作原理同一个地方,而不是其他,而是说:
你应该向上突破码成几行搞清楚到底什么是空(VAR路线= ViewContext.RouteData; var values = ...;)等。
你从哪里调用CheckActiveClass?在什么时候?它位于哪里? ViewContext并不总是随处可见。但是你可以更好地了解#1后没有的东西。
詹姆斯
我在视图的代码隐藏中使用它。以及主页的代码隐藏。 我会分解它,看看它的错误。这很奇怪,因为它在开发机器上工作,但不在登台服务器上。 – rksprst 2009-08-09 22:50:36
尝试使用大写
字符串currentController = ViewContext.RouteData.Values [ “控制器”]的ToString(); String currentAction = ViewContext.RouteData.Values [“Action”]。ToString(); String currentID = ViewContext.RouteData.Values [“ID”]。ToString();
您是否找到任何解决方案?我现在有类似的问题... – 2010-09-07 12:16:58
不,我没有,我最终改变了逻辑和它的工作方式。 – rksprst 2010-09-07 23:19:50