2010-08-15 85 views
1

我遇到T4MVC和命名参数的错误。我有一个控制器:T4MVC和命名参数

public class ProductsController : Controller 
{ 
    public virtual ViewResult List(int page = 1) 
    { 
     // foo.DoSomething() 
    } 
} 

看来T4MVC也会创建一个重载List()。其结果是致电

myProductsController.List(3) 

正确执行foo.DoSomething()。但是打电话

myProductsController.List() 

不执行foo.DoSomething() - T4MVC创建了一个空的List()重载。

我已将T4MVC从我的项目中取出,现在一切正常。但我真的很想能够使用它 - 我错过了某个地方的设置吗?

+0

只要确保您在下面看到我的UPDATE。谢谢! – 2010-08-16 03:11:03

回答

3

更新:好的,我现在有一个真正的修复。它被检入到Codeplex存储库中。您可以通过登录here获取最新的T4MVC.tt。在将其包含在下一个官方版本中之前,如果您可以尝试并确认它适用于您,那将非常棒。谢谢!


你是对的,这里有一个问题。我以前没有遇到过这种情况。对于短期速战速决,刚刚摆脱下面的代码从T4MVC.tt(大约线370):

<#foreach (var method in controller.ActionMethodsUniqueWithoutParameterlessOverload) { #> 
     [NonAction] 
     [<#= GeneratedCode #>, DebuggerNonUserCode] 
     public <#=method.ReturnTypeFullName #> <#=method.Name #>() { 
      return new T4MVC_<#=method.ReturnType #>(Area, Name, ActionNames.<#=method.ActionName #>); 
     } 
<#} #> 

但我需要寻找一个真正的解决。通常情况下,这一代发生在动作没有无参数超载时。它只需要检测具有所有可选参数的操作应该基本上被视为无参数的情况。

+0

它的工作原理 - 感谢您闪电般快速修复! – 2010-08-16 15:09:21

+0

太好了,只要我推出一个新版本,那个修复版本就会在2.6.22。 – 2010-08-16 17:11:51