2010-08-15 25 views
1

Je rencontre une erreur avec T4MVC et les paramètres nommés. J'ai un contrôleur:T4MVC et paramètres nommés

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

Il semble que T4MVC crée une surcharge List(). Le résultat est que l'appel

myProductsController.List(3) 

exécute correctement foo.DoSomething(). Mais appeler

myProductsController.List() 

n'exécute pas foo.DoSomething() - T4MVC a créé une surcharge liste vide().

J'ai retiré T4MVC de mon projet, et tout fonctionne bien maintenant. Mais j'aimerais vraiment pouvoir l'utiliser - est-ce que je manque un réglage quelque part?

+0

Assurez-vous juste que vous voyez ma mise à jour ci-dessous. Merci! –

Répondre

3

MISE À JOUR: Ok, j'ai une vraie solution maintenant. Il est archivé dans le référentiel Codeplex. Vous pouvez obtenir le dernier T4MVC.tt en allant au here. Avant d'inclure cela dans la prochaine version officielle, ce serait bien si vous pouviez l'essayer et confirmer que cela fonctionne pour vous. Merci!


Vous avez raison, il y a un problème ici. Je n'avais pas rencontré cette situation auparavant. Pour une solution rapide à court terme, simplement se débarrasser du code ci-dessous de T4MVC.tt (autour de la ligne 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 #>); 
     } 
<#} #> 

Mais je vais avoir besoin de chercher une vraie solution. Normalement, cette génération se produit lorsque l'action n'a pas de surcharge sans param. Il suffit de détecter qu'une action avec des params tout-optionnels devrait être traitée comme un cas non-param.

+0

Cela fonctionne - merci pour le correctif rapide-éclair !!!! –

+0

Super, cette correction sera en 2.6.22, chaque fois que je vais pousser une nouvelle construction. –