1

我遇到了 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 从我的项目中移除,现在一切正常。但我真的很想能够使用它——我是不是在某个地方错过了一个设置?

4

1 回答 1

3

更新:好的,我现在有一个真正的修复。它已签入 Codeplex 存储库。你可以到这里获取最新的 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 #>);
        }
<#} #>

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

于 2010-08-15T20:44:05.730 回答