Pourquoi le modelbinding ne fonctionne-t-il pas sur un DropDown ?
Qu'est-ce que je fais de mal ?
Pour illustrer mon problème, j'ai fait ce qui suit :
Création d'un nouveau projet asp.net MVC (beta1) Création de la classe suivante :
HomeViewData : ViewDataDictionary
+List : SelectList
Ajout d'un viewdata à la classe HomeController comme suit
Homecontroller: Controller
+HomeViewData vd = new HomeViewData
J'ai ajouté les lignes suivantes à ma méthode Home.Index()
vd.list = new SelectList(new List<string>(){"test", "test1", "test2"});
return View("Index", vd);
Et j'ai répliqué la même méthode mais avec une signature différente pour attraper les appels de retour.
[AcceptVerps(HttpVerbs.Post)]
public ActionResult Index(HomeViewdata d)
Ici, j'ai ajouté un point d'arrêt à la première ligne de code.
Puis j'ai ajouté le code suivant à mon Index.aspx
<%Html.BeginForm();%>
<%=Html.DropDownList("List")%>
<%Html.EndForm();%>
En conséquence, j'obtiens une page qui présente une belle liste déroulante avec les valeurs test, test1 et test2.
Ensuite, après avoir sélectionné une valeur, j'appuie sur la touche Entrée (je n'ai pas pris la peine d'utiliser un bouton d'envoi) et je vois comment mon point d'arrêt arrête le code. Je vérifie la valeur de la HomeViewData... NULL
Si je fais le même exercice mais avec une zone de texte par exemple, tout fonctionne bien...
--EDIT--
Les choses que j'ai essayées depuis ce post :
- Ajout d'un attribut [Bind(Prefix="")] à mon action comme suggéré par Phil
- Ajout d'un [Bind(Prefix=" ")] pour voir si cela supprimerait l'erreur "nom vide non autorisé".
- Ajout du nom du paramètre de mon action dans le nom de mon contrôle