2010-08-15 80 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