Razor T4MVC ArgumentOutOfRangeException在视图中
我刚刚在我的项目上安装了T4MVC,遇到了一些问题 在我的控制器中,我可以毫无问题地调用重定向到操作:Razor T4MVC ArgumentOutOfRangeException在视图中,razor,asp.net-mvc-4,t4mvc,Razor,Asp.net Mvc 4,T4mvc,我刚刚在我的项目上安装了T4MVC,遇到了一些问题 在我的控制器中,我可以毫无问题地调用重定向到操作: return RedirectToAction(Actions.Index()); 如果我真的从我的角度调用它,我会得到ArgumentOutOfRangeException @Html.ActionLink("Delete Dinner", MVC.Home.Index()) 为了确保我做得正确,我创建了一个新的MVC解决方案,这一行工作正常。 我从HomeController中删除
return RedirectToAction(Actions.Index());
如果我真的从我的角度调用它,我会得到ArgumentOutOfRangeException
@Html.ActionLink("Delete Dinner", MVC.Home.Index())
为了确保我做得正确,我创建了一个新的MVC解决方案,这一行工作正常。
我从HomeController中删除了我的“baseController”继承,并重新设置了T4MVC,以确保它不会干扰。
我甚至不知道从哪里开始寻找这个,调试对我没有帮助,因为它似乎在扩展方法中爆炸:
[ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index]
System.ThrowHelper.ThrowArgumentOutOfRangeException() +72
System.Collections.ObjectModel.Collection`1.set_Item(Int32 index, T value) +10419142
System.Web.Mvc.ControllerContext.get_RequestContext() +25
System.Web.Mvc.Html.LinkExtensions.RouteLink(HtmlHelper htmlHelper, String linkText, String routeName, String protocol, String hostName, String fragment, RouteValueDictionary routeValues, IDictionary`2 htmlAttributes) +47
System.Web.Mvc.T4Extensions.ActionLink(HtmlHelper htmlHelper, String linkText, ActionResult result, IDictionary`2 htmlAttributes, String protocol, String hostName, String fragment) +196
System.Web.Mvc.T4Extensions.ActionLink(HtmlHelper htmlHelper, String linkText, ActionResult result) +72
ASP._Page_Views_Home_Index_cshtml.Execute() in c:\Thva\Misc\DropBox\Work\MyProjects\Wims\Wims.Website\Views\Home\Index.cshtml:53
有什么想法吗?
提前谢谢
编辑:我刚刚尝试了这个,但仍然不起作用:
创建新控制器:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace Wims.Website.Controllers
{
public partial class MyTestController : Controller
{
//
// GET: /MyTest/
public virtual ActionResult Index()
{
return View();
}
}
}
运行4MVC,
视图:
从堆栈来看,它似乎在访问与T4MVC无关的请求上下文时遇到了问题。要隔离,您是否可以删除T4MVC行并尝试写入:
@ViewContext.RequestContext
你认为呢?您也可以尝试@Html.ViewContext.RequestContext
。我猜你也会看到同样的例外。如果是这样的话,我不确定是什么原因造成的,但至少它让你更接近了
另一件要尝试的事情:常规MVC
ActionLink
有效吗,还是只有T4MVCActionLink
失败?根据堆栈,它似乎无法访问与T4MVC无关的请求上下文。要隔离,您是否可以删除T4MVC行并尝试写入:
@ViewContext.RequestContext
你认为呢?您也可以尝试@Html.ViewContext.RequestContext
。我猜你也会看到同样的例外。如果是这样的话,我不确定是什么原因造成的,但至少它让你更接近了
还有一件事需要尝试:常规MVC
ActionLink
有效吗,还是只有T4MVCActionLink
失败了?我和David Ebbo一起研究过这个问题(非常感谢他花了这么多时间),但我找不到为什么它不起作用
在用我自己的名字空间复制粘贴T4MVC代码并使用这些方法之后,它就开始工作了
所以,我刚刚重新创建了一个新的MVC网站,并重新导入了所有内容。。虽然不好玩,但我相信T4MVC值得麻烦:)我已经和David Ebbo一起研究过这个问题(非常感谢他花了这么多时间),但我不知道为什么它不起作用 在用我自己的名字空间复制粘贴T4MVC代码并使用这些方法之后,它就开始工作了
所以,我刚刚重新创建了一个新的MVC网站,并重新导入了所有内容。。不好玩,但我相信T4MVC值得麻烦:)好的,所以我知道我的答案很晚了,但它可能会帮助其他人。就我而言,一切都很顺利,直到我突然犯了这个错误:
[ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index]
System.Collections.ObjectModel.Collection`1.set_Item(Int32 index, T value) +14406551
System.Web.Mvc.Html.LinkExtensions.RouteLink(HtmlHelper htmlHelper, String linkText, String routeName, String protocol, String hostName, String fragment, RouteValueDictionary routeValues, IDictionary`2 htmlAttributes) +89
System.Web.Mvc.T4Extensions.ActionLink(HtmlHelper htmlHelper, String linkText, ActionResult result, Object htmlAttributes, String protocol, String hostName, String fragment) +338
System.Web.Mvc.T4Extensions.ActionLink(HtmlHelper htmlHelper, String linkText, ActionResult result, Object htmlAttributes) +107
ASP._Page_Views_Shared__Layout_cshtml.Execute() in c:\work\[...]\Views\Shared\_Layout.cshtml:29
System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +280
System.Web.Mvc.WebViewPage.ExecutePageHierarchy() +126
System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +196
System.Web.WebPages.WebPageBase.Write(HelperResult result) +89
System.Web.WebPages.WebPageBase.RenderSurrounding(String partialViewName, Action`1 body) +233
System.Web.WebPages.WebPageBase.PopContext() +291
Castle.DynamicProxy.AbstractInvocation.Proceed() +116
Glimpse.Core.Extensibility.ExecutionTimer.Time(Action action) +85
Glimpse.Core.Extensibility.AlternateMethod.NewImplementation(IAlternateMethodContext context) +186
Castle.DynamicProxy.AbstractInvocation.Proceed() +604
System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +378
Castle.Proxies.AsyncControllerActionInvokerProxy.InvokeActionResult_callback(ControllerContext controllerContext, ActionResult actionResult) +21
Castle.DynamicProxy.AbstractInvocation.Proceed() +116
Glimpse.Core.Extensibility.ExecutionTimer.Time(Action action) +85
Glimpse.Core.Extensibility.AlternateMethod.NewImplementation(IAlternateMethodContext context) +186
Castle.DynamicProxy.AbstractInvocation.Proceed() +604
System.Web.Mvc.<>c__DisplayClass1a.<InvokeActionResultWithFilters>b__17() +33
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) +853420
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) +265
System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) +837892
System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) +28
System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +15
System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +65
System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +15
System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +51
System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) +42
System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +15
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +51
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +606
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +288
[ArgumentOutOfRangeException:索引超出范围。必须为非负且小于集合的大小。
参数名称:索引]
System.Collections.ObjectModel.Collection`1.set_项(Int32索引,T值)+14406551
System.Web.Mvc.Html.LinkExtensions.RouteLink(HtmlHelper、字符串linkText、字符串routeName、字符串协议、字符串主机名、字符串片段、RouteValueDictionary routeValues、IDictionary`2 htmlAttributes)+89
ActionLink(HtmlHelper、字符串链接文本、ActionResult结果、对象htmlAttributes、字符串协议、字符串主机名、字符串片段)+338
ActionLink(HtmlHelper、字符串链接文本、ActionResult结果、对象htmlAttributes)+107
c:\work\[…]\Views\Shared\\u Layout.cshtml:29中的ASP
System.Web.WebPages.WebPageBase.ExecutePageHierarchy()+280
System.Web.Mvc.WebViewPage.ExecutePageHierarchy()+126
System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext-pageContext,TextWriter-writer,WebPageRenderingBase-startPage)+196
System.Web.WebPages.WebPageBase.Write(HelperResult结果)+89
System.Web.WebPages.WebPageBase.rendersUrounding(字符串partialViewName,Action`1 body)+233
System.Web.WebPages.WebPageBase.PopContext()+291
Castle.DynamicProxy.AbstractInvocation.Procedure()+116
Scope.Core.Extensibility.ExecutionTimer.Time(动作)+85
scape.Core.Extensibility.AlternateMethod.NewImplementation(IAlternateMethodContext)+186
Castle.DynamicProxy.AbstractInvocation.Procedure()+604
System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext上下文)+378
Castle.Proxies.AsyncControllerActionInvokerProxy.InvokeActionResult_回调(ControllerContext ControllerContext,ActionResult ActionResult)+21
Castle.DynamicProxy.AbstractInvocation.Procedure()+116
Scope.Core.Extensibility.ExecutionTimer.Time(动作)+85
scape.Core.Extensibility.AlternateMethod.NewImplementation(IAlternateMethodContext)+186
Castle.DynamicProxy.AbstractInvocation.Procedure()+604
System.Web.Mvc.c__显示Class1A.b_17()+33
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter筛选器,ResultExecutingContext预文本,Func`1 continuation)+853420
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext ControllerContext,IList`1 filters,ActionResult ActionResult)+265
System.Web.Mvc.Async.c__显示类25.b__22(IAsyncResult asyncResult)+837892
System.Web.Mvc.c_uuudisplayClassId.b_uuu18(IAsyncResult asyncResult)+28
System.Web.Mvc.Async.c_uuuudisplayClass4.b_uuuu3(IAsyncResult ar)+15
System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult)+65
System.Web.Mvc.Async.c_uuuudisplayClass4.b_uuuu3(IAsyncResult ar)+15
System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult)+51
System.Web.Mvc.c_uuudisplayClass8.b_uuu3(IAsyncResult asyncResult)+42
System.Web.Mvc.Async.c_uuuudisplayClass4.b_uuuu3(IAsyncResult ar)+15
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)+51
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+606
System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,布尔值和完成值
[ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index]
System.Collections.ObjectModel.Collection`1.set_Item(Int32 index, T value) +14406551
System.Web.Mvc.Html.LinkExtensions.RouteLink(HtmlHelper htmlHelper, String linkText, String routeName, String protocol, String hostName, String fragment, RouteValueDictionary routeValues, IDictionary`2 htmlAttributes) +89
System.Web.Mvc.T4Extensions.ActionLink(HtmlHelper htmlHelper, String linkText, ActionResult result, Object htmlAttributes, String protocol, String hostName, String fragment) +338
System.Web.Mvc.T4Extensions.ActionLink(HtmlHelper htmlHelper, String linkText, ActionResult result, Object htmlAttributes) +107
ASP._Page_Views_Shared__Layout_cshtml.Execute() in c:\work\[...]\Views\Shared\_Layout.cshtml:29
System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +280
System.Web.Mvc.WebViewPage.ExecutePageHierarchy() +126
System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +196
System.Web.WebPages.WebPageBase.Write(HelperResult result) +89
System.Web.WebPages.WebPageBase.RenderSurrounding(String partialViewName, Action`1 body) +233
System.Web.WebPages.WebPageBase.PopContext() +291
Castle.DynamicProxy.AbstractInvocation.Proceed() +116
Glimpse.Core.Extensibility.ExecutionTimer.Time(Action action) +85
Glimpse.Core.Extensibility.AlternateMethod.NewImplementation(IAlternateMethodContext context) +186
Castle.DynamicProxy.AbstractInvocation.Proceed() +604
System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +378
Castle.Proxies.AsyncControllerActionInvokerProxy.InvokeActionResult_callback(ControllerContext controllerContext, ActionResult actionResult) +21
Castle.DynamicProxy.AbstractInvocation.Proceed() +116
Glimpse.Core.Extensibility.ExecutionTimer.Time(Action action) +85
Glimpse.Core.Extensibility.AlternateMethod.NewImplementation(IAlternateMethodContext context) +186
Castle.DynamicProxy.AbstractInvocation.Proceed() +604
System.Web.Mvc.<>c__DisplayClass1a.<InvokeActionResultWithFilters>b__17() +33
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) +853420
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) +265
System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) +837892
System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) +28
System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +15
System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +65
System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +15
System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +51
System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) +42
System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +15
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +51
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +606
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +288
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<configuration>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
> Consider app.config remapping of assembly "System.Web.Mvc, Culture=neutral, PublicKeyToken=31bf3856ad364e35" from Version "3.0.0.0" [C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 3\Assemblies\System.Web.Mvc.dll] to Version "4.0.0.0" to solve conflict and get rid of warning.
...and same warnings for System.Web.WebPages, System.Web.Razor, System.Web.WebPages.Deployment, System.Web.WebPages.Razor
> C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1605,5): warning MSB3247: Found conflicts between different versions of the same dependent assembly.
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
</assemblyBinding>
...the same for the other assemblies
</runtime>
</configuration>