2010-10-08 6 views
2

J'ai un contrôleur qui hérite d'un contrôleur de base. Tous les deux ont modifié (post) l'action qui prennent deux arguments:ASP.NET MVC - Surcharge d'une action avec différents paramètres

Sur commande de base:

[HttpPost] 
public virtual ActionResult Edit(IdType id, FormCollection form) 

Et dans le contrôleur dérivé:

[HttpPost] 
public ActionResult Edit(int id, SomeViewModel viewModel) 

Si je laisse comme ça, je reçois un exception car il y a un appel ambigu. Toutefois, je ne peux pas utiliser override sur l'action dérivée, car les signatures de méthode ne correspondent pas exactement. Y a-t-il quelque chose que je puisse faire ici?

Répondre

9

En plus de la réponse du développeur Art une solution serait:

laisser la méthode de base telle qu'elle est et dans votre classe dérivée mettre en œuvre la méthode de base et annoter avec [NonAction]

[NonAction] 
public override ActionResult Edit(IdType id, FormCollection form) 
{ 
    // do nothing or throw exception 
} 

[HttpPost] 
public ActionResult Edit(int id, SomeViewModel viewModel) 
{ 
    // your implementation 
} 
+0

Ah, Ok. Je vais essayer ... – UpTheCreek

+0

Oui, ça marche. Semble un peu hacky;) donc je laisse la question ouverte pendant un certain temps au cas où il y a d'autres idées - sinon ça va faire le travail. Merci. – UpTheCreek

+2

L'attribut est '[NonAction]' pas '[NoAction]', Votre solution a enregistré ma journée – RezaRahmati

1

I'D enchaîner:

Sur commande de base:

[HttpPost] 
public virtual ActionResult Edit(IdType id, FormCollection form) 

Et dans le contrôleur dérivé:

[HttpPost] 
public virtual ActionResult Edit(IdType id, FormCollection form) 
{ 
    var newId = //some enum? transform 
    var boundModel = UpdateModel(new SomeViewModel(), form); 

    return Edit(newId, boundModel); 
} 

[HttpPost] 
public ActionResult Edit(int id, SomeViewModel viewModel) 

Je n'ai pas testé, en passant une méthode à une autre mission devrait fonctionner. Il pourrait y avoir des répercussions sur la sécurité de cette façon.

+0

Merci, je vais essayer aussi. – UpTheCreek

Questions connexes