Comment puis-je éviter AmbiguousMatchException entre les deux actions du contrôleur?
J'ai deux actions de contrôleur avec le même nom, mais avec différentes signatures de méthode. Ils ressemblent à ceci:
//
//GET: /Stationery/5?asHtml=true
[AcceptVerbs(HttpVerbs.Get)]
public ContentResult Show(int id, bool asHtml)
{
if (!asHtml)
RedirectToAction("Show", id);
var result = Stationery.Load(id);
return Content(result.GetHtml());
}
//
//GET: /Stationery/5
[AcceptVerbs(HttpVerbs.Get)]
public XmlResult Show(int id)
{
var result = Stationery.Load(id);
return new XmlResult(result);
}
Mes tests unitaires n'ai pas de problème avec l'appel de l'une ou l'autre action de contrôleur, mais mon test de la page html jette un Système.De la réflexion.AmbiguousMatchException.
<a href="/Stationery/1?asHtml=true">Show the stationery Html</a>
<a href="/Stationery/1">Show the stationery</a>
Ce qui doit changer pour faire ce travail?
Vous devez vous connecter pour publier un commentaire.
Juste une méthode de ce genre.
Heres un lien, vous pouvez trouver divers. Il parle à propos de la surcharge de l'Contrôleurs MVC.
Il y a deux façons d'aborder ce:
1> Modifier le nom de la méthode.
2> Fournir différents ActionName attributs pour les deux méthodes. Vous pouvez définir votre propre attribut.
Il est le
ActionName
attribut. Prendre un coup d'oeil.Pour surmonter ce problème, vous pouvez écrire un
ActionMethodSelectorAttribute
qui examine laMethodInfo
pour chaque action, et la compare à la publication des valeurs d'un Formulaire et rejette ensuite l'une des méthodes de laquelle le formulaire de valeurs ne correspondent pas (à l'exclusion du nom du bouton, bien sûr).Voici un exemple:- http://blog.abodit.com/2010/02/asp-net-mvc-ambiguous-match/
Vous pouvez également en faire un plus simple
ActionMethodSelectorAttribute
qui ne regarde que le bouton soumettre nom mais qui ferait le lien de votre contrôleur et la vue de plus près.