Razor T4MVC ArgumentOutOfRangeException在视图中

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中删除

我刚刚在我的项目上安装了T4MVC,遇到了一些问题

在我的控制器中,我可以毫无问题地调用重定向到操作:

  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
有效吗,还是只有T4MVC
ActionLink
失败?

根据堆栈,它似乎无法访问与T4MVC无关的请求上下文。要隔离,您是否可以删除T4MVC行并尝试写入:

@ViewContext.RequestContext
你认为呢?您也可以尝试
@Html.ViewContext.RequestContext
。我猜你也会看到同样的例外。如果是这样的话,我不确定是什么原因造成的,但至少它让你更接近了


还有一件事需要尝试:常规MVC
ActionLink
有效吗,还是只有T4MVC
ActionLink
失败了?

我和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>