maintaning abbassa lo stato selezionato dopo il postback nel razor MVC?

In un Web MVC 4 dispongo di elenchi a discesa con il seguente codice di esempio:

@(Html.DropDownList("Condition2", new SelectList(Model.Makes, "CCultureId", "CTitle"), "All",new {@class="span3"})) 

Ho Tutti come prima opzione in selezionare e sul pulsante premere, la pagina mostra i dati in esso. Dopo il post, i menu a discesa sono stati ripristinati alla pressione del pulsante, puoi indicarmi come effettuare il dropdown mantenendo il suo stato anche dopo il post backback (ho capito in MVC4 non ci sono postback, me lo riferisco come giro al server ).

Un modo per farlo è, nel tuo controller, restituire il valore inviato nel modello. Ciò significa che il tuo elenco a discesa deve essere collegato al tuo modello di visualizzazione.

ViewModel:

 public class MyViewModel { // more properties... public string Make {get;set;} // more properties } 

controller:

 [HttpPost] public ActionResult MyAction(MyViewModel model) { // do postback stuff return View(model); // model.Make is set to whatever was submitted and will be returned } 

html:

 @model Models.MyViewModel @(Html.DropDownListFor(m => m.Make, new SelectList(Model.Makes, "CCultureId", "CTitle", Model.Make), "All", new {@class="span3"})) 

Puoi usare Viewbag per salvare l’object selezionato, vedi soffiare:

Ottieni azione

 [HttpGet] public ActionResult YourAction() { ViewBag.SelectedItem = ""; /// return View(new yourViewModel); } 

Pubblica azione

 [HttpPost] public ActionResult YourAction(FormCollection form,YourViewModel model) { ViewBag.SelectedItem = form["Condition2"]; /// return View(model); } 

vista

 @(Html.DropDownList("Condition2", new SelectList(Model.Makes, "CCultureId", "CTitle",ViewBag.SelectedItem), "All",new {@class="span3"})) 

Puoi usare il? operatore che funziona in questo modo e usa la proprietà Selected del selectlistitem

 Console.WriteLine((2 == 2 ? "true" : "false")); 

e poi per esempio

 private Entities en = new Entities(); public ActionResult Index(string selectedvalue) { List selectlist = en.tblUser.Select(x => new SelectListItem { Text = x.Name, Value = x.Id, Selected = ( x.Name == selectedvalue ? false : true) }) .ToList(); ViewBag.DropDown = selectlist; return View(); } 

quindi nella vista lo metti semplicemente

 @Html.DropDownList("DropDownName", (List)ViewBag.DropDown)) 

ovviamente non è consigliabile usare viewbag ma utilizzare un modello con una proprietà list.