Comme womp dit, un navigateur ne soumettra la valeur sélectionnée d'une liste déroulante. Ceci est facilement lié au classeur par défaut, voir ci-dessous.
Si vous ne modifiez pas la liste PossibleValues sur le client, il n'est pas nécessaire de les renvoyer. Si vous avez besoin de repeupler la liste, faites-le côté serveur dans votre action de publication en utilisant la même méthode que celle utilisée pour le dictionnaire.
Par exemple, en vous page:
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<ViewModel1>" %>
<!-- some html here -->
<%= Html.DropDownListFor(x => x.SelectedKey, new SelectList(Model.PossibleValues, "key", "value"))%>
Dans votre contrôleur
[AcceptVerbs(HttpVerbs.Get)]
public ViewResult Edit() {
var model = new ViewModel1 {
PossibleValues = GetDictionary() //populate your Dictionary here
};
return View(model);
}
[AcceptVerbs(HttpVerbs.Post)]
public ViewResult Edit(ViewModel1 model) { //default model binding
model.PossibleValues = GetDictionary(); //repopulate your Dictionary here
return View(model);
}
Où GetDictionary() est une méthode qui retourne votre objet Dictionnaire peuplé.
See this similar question for more details
Utilisez-vous la version ASP.NET MVC 1 ou 2? –
J'utilise la version 2 – jameszhao00