2008-09-06 8 views
1

J'ai un problème avec un exemple de routage avec l'aperçu 5 de asp.net mvc.ASP.NET MVC Aperçu 5 ambiguïté de routage

Dans le AccountController j'ai 2 actions:

public ActionResult Delete() 
public ActionResult Delete(string username) 

Tout en essayant de chercher compte/Supprimer ou compte/Supprimer le nom d'utilisateur = davide le ControllerActionInvoker renvoie une exception disant que Supprimer la demande est ambiguë entre mes actions de remorquage? méthodes

La route par défaut dans global.asax n'a pas été modifiée.

L'initiateur de l'action ne devrait-il pas comprendre quelle est la méthode à appeler en regardant dans la liste des paramètres?

En utilisant l'aperçu 4 je n'avais pas ce genre de problème en effectuant la même opération.

Une idée?

Répondre

0

Je ne peux pas dire avec certitude pourquoi cela se produit. Mais vous voudrez peut-être considérer seulement avoir l'action Supprimer (nom d'utilisateur de chaîne) et enlever la surcharge sans paramètre. Étant donné que string est nullable, je comprends que l'appel de Account/Delete appelle l'action avec un paramètre de nom d'utilisateur nul que vous pouvez ensuite tester au début de la méthode d'action.

+0

Berko, ce n'est pas ce que je veux. Les deux méthodes d'action exécutent différentes actions. Tester les paramètres au début des méthodes ce n'est vraiment pas la bonne façon de faire ... trop sale. Je vais trouver autre chose. Merci quand même –

0

Ce que je ferais est le fossé vide Supprimer(), et utiliser uniquement Supprimer (nom d'utilisateur string)

Dans votre URL que vous avez quelque chose de routage auriez similaire à "/{Contrôleur}/{Action}/{nom d'utilisateur}/"? Si vous avez "/ {Controller}/{Action}/{Id} /" vous feriez mieux de faire Delete (string id) et de cette façon juste en utilisant l'URL pour gérer cela "/ Account/Delete/davide /"

cela dit utiliser votre route par défaut qui devrait être quelque chose comme la valeur par défaut Id est « »

Ensuite, dans votre méthode Delete (id string) ont:

public ActionResult Delete(string id) 
{ 
    if(string.IsNullOrEmpty(id)) return EmptyID(); 

    // Continue normal Delete method 
} 

public ActionResult EmptyID() 
{ 
    // The method you were going to have on a blank delete. 
} 

ce ou tout simplement l'envelopper dans la seule méthode sur un if {} else {}

De toute façon, je serais juste aller avec le sur e méthode et faire un défaut sur votre nom d'utilisateur/id dans votre itinéraire d'une chaîne vide et le gérer de cette façon.

Si vous voulez me contacter sur un autre suivi de ce que je veux dire, ou tout ce qui peut aider, ping-moi à andrew @ mon domaine sur ma page d'information. Edit: Ah à peu près ce que Berko a dit de toute façon, je ne suis pas sûr de savoir comment les attributs nommés aideraient - alors s'il vous plaît poster un commentaire ici détaillant pour les autres gars qui trouvent les mêmes problèmes! :)

+0

avez-vous reçu mon courrier comme vous l'avez suggéré? –

0

Son ambiguë parce que les deux actions du contrôleur sont la même méthode de publication. Vous ne pouvez l'utiliser que dans un scénario d'envoi de formulaire, par exemple si vous envoyez une donnée de formulaire qui utilise un post HTTP.