2013-11-25 4 views
6

In un MVC 4 Web ho elenchi a discesa con il codice di esempio riportato di seguito:maintaning abbassa lo stato selezionato dopo la postback nel rasoio MVC?

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

Ho Tutto come prima opzione nel selezionare e il premere il pulsante, 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).

risposta

7

Un modo per farlo è, nel 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"})) 
+0

grazie a @jzm, il mio modello è un po 'complesso e contiene più elenchi e articoli, non è un singolo elemento. Il tuo suggerimento manterrà ancora l'ultimo stato dell'elemento selezionato nel menu a discesa? – Toubi

+0

Sì. Basta creare una proprietà per la casella di selezione come ho per es. "Rendere". Quindi fai riferimento ad esso nella tua istruzione Html.DropDownListFor() nel tuo html, quindi puoi restituirlo nella tua azione post. – jzm

+0

ho bisogno di passare lo stesso modello per vedere di nuovo che sta venendo come parametro in azione? in realtà per ora dentro l'azione sto creando un nuovo modello e passandolo alla vista. Per favore consiglio – Toubi

0

È possibile utilizzare Viewbag per salvare la voce selezionata, vedi soffiò:

Get Azione

[HttpGet] 
    public ActionResult YourAction() 
    { 

     ViewBag.SelectedItem = ""; 
     /// 
     return View(new yourViewModel); 
    } 

Messaggio Azione

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

View

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

È possibile utilizzare il? operatore che funziona come questo e utilizzare 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<SelectListItem> 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(); 
       } 

poi nella vista u semplicemente mettere questo

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

ovviamente suo raccomandato utilizzare viewbag ma utilizzare un modello con una proprietà elenco.