Lorsque les données est affiché, les éléments énumérés dans le DropDown
ne sont pas réaffectés au modèle, donc je suppose que vous n'êtes pas les chercher à nouveau et les re-ajouter à votre modèle avant de retourner votre modèle à la vue.
Vous devez vous assurer sur votre poste que vous remplissez Model.StateProvinces
, puis en le transmettant à votre vue. Seules les valeurs sont conservées contrairement à WebForms qui conserverait les DropDownList
éléments dans le ViewState
et les reconstruirait pour vous.
donc en supposant que votre contrôleur ressemble à quelque chose comme:
// POST: /YourController/YourAction/{ID}
[HttpPost]
public ActionResult YourAction(YourModel model, int id)
{
// model.StateProvinceId has the selected value
// you need to fill StateProvinces since it is empty as the list is not posted
// back so it is not autofilled into your model.
model.StateProvinces = LoadYourStateProvincesList();
// This would blow up if StateProvinces is null because your View is assuming that
// it has a valid list of StateProvinces in it to build the DropDown
return View(model);
}
J'ai demandé en fait une une question tout à l'heure qui pourrait être utile pour aider à expliquer comment gérer les listes déroulantes:
Best way of implementing DropDownList in ASP.NET MVC 2?
EDIT: En fonction de votre commentaire, vous n'obtenez même pas la première liste ... eh bien, il semble que vous ne pouvez pas avoir votre configuration du modèle correctement. Avez-vous même un modèle? Votre création renvoie simplement View()
sans données de modèle. Vous devez créer un modèle et le renvoyer.
Par exemple.
public class YourModel
{
public int StateProvinceId { get; set; }
/// ... whatever else you need
}
// Then in your view your controller you need to set it and create it
View(new YourModel() { StateProvinceId = 123 };);
Vous avez besoin du modèle de sorte que lorsque le formulaire est affiché en arrière, vous pouvez récupérer la valeur parce que MVC farcir la valeur dans votre modèle comme e exemple que j'ai posté ci-dessus en ce qui concerne la partie POST.
EDIT: Ok maintenant cette question est plus claire et beaucoup plus simple que la question initiale faisait le problème.Le problème est de vos besoins SelectList disent que ce champs à mettre où:
SelectList theList = new SelectList(stateProvinces, "Value", "Text");
Dans votre question initiale que vous aviez:
<%: Html.DropDownListFor(model => model.StateProvinceId, new SelectList(Model.StateProvinces, "StateProvinceId", "Name"))%>
Ce qui était tout à fait correct, mais il a été la façon dont vous avez été la construction de Model.StateProvinces c'était faux, alors ça m'a découragé en pensant que ça devait être autre chose.
est le Model.StateProvinces réellement rempli avec des objets ET le StateProvinceId contient une valeur non-null ET le modèle! = Null? – Michel
Pouvez-vous montrer l'action? –
Ok Je suppose que Create est votre GET ... où est le code qui gère le message et renvoie le résultat? C'est là que je pense que le problème est et ViewData n'est pas persisté entre les appels, mais je pourrais être totalement mal interpréter la question. Le problème est-il lors du chargement initial ou après la publication de vos résultats et la reconstruction de la vue? – Kelsey