Asp.net mvc 3 生产时MvcSiteMapProvider中的NullReferenceException
问题是我经常在生产站点(ASP.NET MVC 3)收到错误,但无法在本地重现此错误。 例外情况的文本为:Asp.net mvc 3 生产时MvcSiteMapProvider中的NullReferenceException,asp.net-mvc-3,mvcsitemapprovider,Asp.net Mvc 3,Mvcsitemapprovider,问题是我经常在生产站点(ASP.NET MVC 3)收到错误,但无法在本地重现此错误。 例外情况的文本为: ExceptionType: System.NullReferenceException Message: Object reference not set to an instance of an object. StackTrace: at System.Collections.Specialized.NameObjectCollectionBase.BaseGetAllKeys
ExceptionType: System.NullReferenceException
Message: Object reference not set to an instance of an object.
StackTrace:
at System.Collections.Specialized.NameObjectCollectionBase.BaseGetAllKeys()
at System.Collections.Specialized.NameValueCollection.get_AllKeys()
at MvcSiteMapProvider.MvcSiteMapNode.get_MetaAttributes()
at MvcSiteMapProvider.Web.Html.SiteMapNodeModelMapper.MapToSiteMapNodeModel(SiteMapNode node, MvcSiteMapNode mvcNode, IDictionary`2 sourceMetadata)
at MvcSiteMapProvider.Web.Html.SiteMapPathHelper.BuildModel(MvcSiteMapHtmlHelper helper, SiteMapNode startingNode)
at MvcSiteMapProvider.Web.Html.SiteMapPathHelper.SiteMapPath(MvcSiteMapHtmlHelper helper, String templateName)
at ASP._Page_Views_Shared__LoggedInLayout_cshtml.Execute() in c:\Solution\Sites\Project2Site\Views\Shared\_LoggedInLayout.cshtml:line 86
at System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
at System.Web.Mvc.WebViewPage.ExecutePageHierarchy()
at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
at System.Web.WebPages.WebPageBase.Write(HelperResult result)
at System.Web.WebPages.WebPageBase.RenderSurrounding(String partialViewName, Action`1 body)
at System.Web.WebPages.WebPageBase.PopContext()
at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)
at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19()
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult)
at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
异常类型:System.NullReferenceException
消息:对象引用未设置为对象的实例。
堆栈跟踪:
位于System.Collections.Specialized.NameObjectCollectionBase.BaseGetAllKeys()处
在System.Collections.Specialized.NameValueCollection.get_AllKeys()中
在mvcsitemprovider.mvcsitemasnode.get_MetaAttributes()处
在MvcSiteMapProvider.Web.Html.SiteMapNodeModelMapper.MapTosItemsNodeModel(SiteMapNode节点,MVCSItemsNode mvcNode,IDictionary`2 sourceMetadata)
在MvcSiteMapProvider.Web.Html.SiteMapPathHelper.BuildModel(MvcSiteMapHtmlHelper helper,SiteMapNode startingNode)
在MvcSiteMapProvider.Web.Html.SiteMapPathHelper.SiteMapPath(MvcSiteMapHtmlHelper helper,字符串templateName)
在c:\Solution\Sites\Project2Site\Views\Shared\\LoggedInLayout.cshtml中的ASP.页面视图共享日志布局cshtml.Execute():第86行
在System.Web.WebPages.WebPageBase.ExecutePageHierarchy()中
在System.Web.Mvc.WebViewPage.ExecutePageHierarchy()中
位于System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext、TextWriter writer、WebPageRenderingBase起始页)
在System.Web.WebPages.WebPageBase.Write(HelperResult结果)中
位于System.Web.WebPages.WebPageBase.RendersUrounding(字符串partialViewName,操作`1 body)
在System.Web.WebPages.WebPageBase.PopContext()中
在System.Web.Mvc.ViewResultBase.ExecuteSult(ControllerContext上下文)中
在System.Web.Mvc.ControllerActionInvoker.c_uuDisplayClass1C.b_uuu19()中
位于System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter筛选器、ResultExecutingContext预文本、Func`1 continuation)
位于System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext ControllerContext,IList`1 filters,ActionResult ActionResult)
位于System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext ControllerContext,String actionName)
我在本地没有这样的错误。这里是调用MvcSiteMap().SiteMapPath()
方法的地方:
也许有人以前也有过同样的问题。如果是,请分享您的解决方案
提前感谢。这不会直接回答您的问题,但可能会帮助您调试问题,因为它只发生在生产环境中,而不会发生在开发/调试环境中 考虑更换您的线路:
@Html.MvcSiteMap().SiteMapPath()
比如:
@SafeBreadCrumb()
@helper SafeBreadCrumb() {
MvcHtmlString output;
try
{
output = Html.MvcSiteMap().SiteMapPath();
}
catch (Exception e)
{
output = new MvcHtmlString(e.Message);
}
<text>@output</text>
}
@SafeBreadCrumb()
@助手安全面包屑(){
mvchtml字符串输出;
尝试
{
output=Html.MvcSiteMap().SiteMapPath();
}
捕获(例外e)
{
输出=新的MvcHtmlString(例如消息);
}
@输出
}
感觉有点脏,但这比获取MvcSiteMapProvider的源代码并坚持一些日志记录要容易!如果它发生在调试中,您就不需要尝试这个。另外,它只是一个视图更改,因此不需要重新编译。您是否查看了此项目现在所在位置的问题页面,或之前所在位置的讨论论坛?如果是这样,您可以添加一些关于您可能要添加的任何动态节点的更多信息。或者您的所有站点地图节点都是在Mvc.sitemap文件中定义的?我已经在Github和Codeplex上查看了这个问题,但还没有找到具有相同stacktrace的。所有节点都在Mvc.Sitemap文件中定义。请发布Mvc.Sitemap文件的内容。我知道理论是,这里的内容不应该是错误的,因为它在调试中工作,但在生产中不工作,但可能会提供一些线索。。。。以及web.config中的站点地图部分?我想这可能是第一个要检查的地方。你能从web上粘贴相关部分吗?conifig应该是这样的: