2009-05-26 3 views
2

J'ai cette action:dans ASp.NET MVC, Comment vous souvenez-vous de l'état d'une liste déroulante?

public ActionResult Add([Bind(Include = "Title,Description")] product product2Add){ 
--SNIP-- 
} 

J'utilise un modèle de modèle de vue où j'ai créé une AddProduct_ViewModel classe spéciale qui contient ma classe de produits et tout ce que je dois à mon avis. Cela inclut 2 listes déroulantes; celui qui fait une recherche DB de toutes les différentes catégories de produits, et un autre qui répertorie les fournisseurs de produits. Lorsque je fais une validation sur mon produit qui échoue, je ne vois pas comment sauvegarder facilement l'état de mes listes déroulantes (sans faire un long code DB). Y a-t-il un meilleur moyen?

+1

Est-ce que les demandes partielles . De cette façon, vous n'aurez même pas besoin de vous souvenir de son état, car cela ne changera pas. :) –

Répondre

-2

Eh bien .. dans MVC il n'y a pas viewstate, donc les contrôles ne peuvent pas enregistrer l'état, bien que vous pouvez utiliser quelques astuces pour le stocker dans un cookie en utilisant javascript - de préférence jquery ou en sauvegardant cette information un événement.

1

dans le contrôleur vous pouvez appeler:

Request.Form.Get("MyDropDownListId"); 

Pour obtenir l'attribut de valeur de l'option sélectionnée. Lors de la création de la liste déroulante à nouveau après la publication, vous pouvez utiliser cette valeur pour redéfinir l'élément sélectionné.

Exemple de réglage de l'élément sélectionné dans la vue lorsque vous avez une propriété "PageSize" dans votre modèle:

Response.Write(Html.DropDownList("pageSize", 
      Model.PageSizes.ToSelectList(p => p.ToString(), p => p.ToString(), p => p.Equals(Model.PageSize)))); 

Avec méthode d'extension ToSelectList():

public static List<SelectListItem> ToSelectList<T>(this IEnumerable<T> enumerable, Func<T, string> text, Func<T, string> value, Func<T, bool> selected) 
{ 
    var items = enumerable.Select(f => new SelectListItem() { Text = text(f), Value = value(f) }).ToList(); 
    return items; 
} 
+0

En bref - l'action du contrôleur doit accepter les données ddl via les paramètres et les renvoyer. Droite? –

+0

oui vous pouvez utiliser un paramètre "chaîne MyDropDownListId" ou vous pouvez utiliser le Request.Form NameValueCollection si vous ne voulez pas déranger avec les paramètres –

+0

Et en effet, vous devez renvoyer la valeur sélectionnée à votre vue après la publication. Vous pouvez éviter cela en utilisant AJAX. –

Questions connexes