System.Web.Mvc.UrlHelper.Action抛出插入RouteCollection的ArgumentNullException

时间:2014-03-13 14:22:21

标签: c# asp.net-mvc asp.net-mvc-4 razor

我在Html.Action()调用中遇到以下错误,无法找出原因。

这是来自我的Views / home / Index.cshtml文件中的调用本身:

<a id="btn-spin-login" href="@Url.Action("Index", "Account")" class="sprite">Login</a>

我在错误流上收到以下错误。这似乎只是在应用程序池在预设时间回收后才会发生。如果我再次进行再循环,则错误消失,这使得调试变得更加困难。

有一点需要注意的是,我将控制器放在与视图相同的文件夹中,而不是放在Controllers文件夹中。


System.ArgumentNullException: Value cannot be null.
Parameter name: item
   at System.Web.Routing.RouteCollection.InsertItem(Int32 index, RouteBase item)
   at System.Web.Mvc.RouteCollectionExtensions.FilterRouteCollectionByArea(RouteCollection routes, String areaName, Boolean& usingAreas)
   at System.Web.Mvc.RouteCollectionExtensions.GetVirtualPathForArea(RouteCollection routes, RequestContext requestContext, String name, RouteValueDictionary values, Boolean& usingAreas)
   at System.Web.Mvc.UrlHelper.GenerateUrl(String routeName, String actionName, String controllerName, RouteValueDictionary routeValues, RouteCollection routeCollection, RequestContext requestContext, Boolean includeImplicitMvcValues)
   at System.Web.Mvc.UrlHelper.GenerateUrl(String routeName, String actionName, String controllerName, RouteValueDictionary routeValues)
   at System.Web.Mvc.UrlHelper.Action(String actionName, String controllerName)
   at ASP._Page_Views_Home_Index_cshtml.Execute() in d:\www\live.wof.com\Sony.Wof\Views\home\Index.cshtml:line 54
   at System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
   at System.Web.Mvc.WebViewPage.ExecutePageHierarchy()
   at System.Web.WebPages.StartPage.ExecutePageHierarchy()
   at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
   at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)
   at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1a.b__17()
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
   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.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.b__22(IAsyncResult asyncResult)

2 个答案:

答案 0 :(得分:1)

问题是你的RouteCollection(RouteTable.Routes)有空记录,默认情况下RouteCollection不是线程安全的,在我的情况下,当我在许多线程中注册新路由时出现了这个问题。现在我正在使用RouteCollection.GetWriteLock使其成为线程安全的,现在我的问题已解决。

答案 1 :(得分:0)

您需要混合使用单引号和双引号。将@ Url.Action周围的双引号更改为单引号,它应该可以正常工作。

<a id="btn-spin-login" href='@Url.Action("Index", "Account")' class="sprite">Login</a>