Question

J'ai un problème avec un échantillon de routage avec la preview de 5 asp.net mvc.

Dans le AccountController j'ai 2 actions:

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

Tout en essayant de regarder pour le Compte/de Supprimer ou de Compte/Supprimer?nom d'utilisateur=davide l'ControllerActionInvoker lève une exception en disant que la demande de Suppression est ambigu entre ma remorque actions de méthodes.

La route par défaut dans le monde.asax n'a pas été changé.

Ne devrait pas l'action de l'appelant comprendre quelle est la méthode à appeler à la recherche dans la liste des paramètres?

L'aide de l'aperçu 4 je n'avais pas ce genre de problème effectuer la même opération.

Une idée?

Était-ce utile?

La solution

Une Solution a été trouvée!

Avec l'introduction de la ActionNameAttribute, il est maintenant nécessaire de filtrer manuellement la méthode à appeler en fonction de la demande.Ceci est fait par le ActionSelectionAttribute.

Explication complète ici: http://haacked.com/archive/2008/08/29/how-a-method-becomes-an-action.aspx

Autres conseils

Je ne peux pas dire avec certitude pourquoi ce qui se passe.Mais vous pouvez envisager d'avoir seulement le Supprimer(string username) de l'action et de retirer le paramètre moins de surcharge.

Parce que la chaîne est nullable ma compréhension est que le simple Compte d'appels/Supprimer va appeler l'action avec une valeur null paramètre nom d'utilisateur que vous pouvez ensuite tester au début de la méthode d'action.

Ce que je voudrais faire est d'abandonner le vide Delete(), et d'utiliser uniquement Supprimer(string username)

Dans votre url de routage, vous auriez quelque chose de semblable "/{Controller}/{Action}/{nom d'utilisateur}/" ?Si vous avez "/{Controller}/{Action}/{Id}/" vous seriez mieux de faire Supprimer(string id), et de cette façon seulement à l'aide de l'url pour gérer cette "/Compte/Supprimer/davide/"

Qui dit utiliser votre route par défaut qui doit être quelque chose comme l'Id par défaut est ""

Puis dans votre Supprimer(string id) méthode:

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.
}

Ou l'envelopper dans une méthode sur un if {} else {}

De toute façon, j'avais juste aller avec une méthode et de faire un défaut de paiement sur votre nom d'utilisateur/id dans votre parcours d'une chaîne vide et de les traiter de cette façon.

Si vous voulez me contacter sur suite jusqu'à ce que je veux dire, ou ce que l'aidera, ping-moi à andrew@ mon domaine sur ma page d'info.

Edit:Ah assez à ce que Berko a dit de toute façon, je ne suis pas sûr de savoir comment Attributs Nommés aiderait - donc s'il vous plaît poster un commentaire ici en détaillant, pour d'autres mecs qui trouvent que les mêmes questions!:)

Son ambigu, car les deux contrôleur de l'action sont la même méthode post..Vous ne peut être utilisé que dans le formulaire de publication scénario par exemple, vous vous soumettez un formulaire de données qui utilise HTTP post..

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top