2016-11-04 2 views
0

J'ai deux méthodes (Actions) avec différents formats d'options mais quand je l'exécute, on me dit qu'elles sont ambiguës. Méthodes montrées ci-dessous.Deux actions dans Controler avec différents conflits de paramètres

public ActionResult SelectInstitutionToEdit(){...} 
public ActionResult SelectInstitutionToEdit(string message){...} 
+2

vous pouvez trouver vous répondez ici .. [http://stackoverflow.com/questions/436866/can-you-overload-controller-methods-in-asp-net-mvc](http://stackoverflow.com/questions/436866/pouvez-vous-surcharger-controller-methods-in-asp-net-mvc) –

Répondre

1

Oui. Vous ne pouvez pas avoir plus d'une méthode d'action avec le même nom (& même verbe http).

Si vous souhaitez que les deux fonctionnent pour les requêtes HET GET, vous pouvez conserver la seconde et vérifier la valeur de votre paramètre message et, sur cette base, renvoyer la réponse correspondante.

public ActionResult SelectInstitutionToEdit(string message) 
{ 
    if(String.IsNullOrEmpty(message)) 
    { 
    // to do :Return something 
    } 
    // to do :Return something 
} 

Cela fonctionne pour yourSite/yourController/SelectInstitutionToEdit et yourSite/yourController/SelectInstitutionToEdit?message=hello

1

Pensez à changer vos signatures:

public ActionResult SelectInstitutionToEdit(){...} 

public ActionResult SelectInstitutionToEditWithString (string message) {...}

1

Bien que le compilateur exécutez ce code sans aucune erreur à cause de méthode de surcharge mais le cadre MVC ne le permet pas. Mais vous pouvez utiliser ActionName attribut:

public ActionResult SelectInstitutionToEdit(){...} 

[ActionName("SelectInstitutionToEditWithParams")] 
public ActionResult SelectInstitutionToEdit(string message){...} 

alors vous devriez l'appeler avec son nouveau nom. Comme ceci:

@using (Html.BeginForm("SelectInstitutionToEditWithParams", "yourController")) 
{ 

} 
1

Utilisez [ActionName("SomeOtherName")] pour la méthode d'action surchargée si son même get/appel poste.