7

Sto usando MVC 5.MVC DropDownList valore selezionato non funziona

ho la mia ViewBag per lista come

ViewBag.TitleList = new SelectList((new string[] { "Mr", "Miss", "Ms", "Mrs" }), contact.Title); 
//contact.Title has selected value. 

poi ho provato a convertire la matrice di SelectListItem (to no avail)

Sulla View sembra come

@Html.DropDownListFor(model => model.Title, ViewBag.TitleList as SelectList, "Select") 

inoltre ho provato

@Html.DropDownList("Title", ViewBag.TitleList as SelectList, "Select") 

L'elenco viene caricato con successo ma lo Selected Value is Not selected. Come risolvere questo problema?

Aggiornamento Il colpevole era ViewBag.Title corrispondente al mio modello.Titolo. Rinominato la mia proprietà del modello in qualcos'altro e ha funzionato. Arrgh!

+2

Usando '@ Html.DropDownListFor()' se il valore di 'model.Title' è (diciamo), poi la seconda opzione "signorina" sarà selezionato (non è necessario il 2 ° parametro nel costruttore 'SelectList'). Verifica che il valore di 'Title' corrisponda esattamente a uno dei valori dell'opzione. –

+0

Sì, il valore nel titolo corrisponde a quelli nell'elenco – Ruchan

+0

Potrebbe trattarsi di un duplicato per quel post. [Eventuali duplicati] [1] [1]: http://stackoverflow.com/questions/5858679/preselect-items-in-multiselect-listbox-mvc3-razor – Tobias

risposta

9

Set valore della proprietà Title nel controller:

ViewBag.TitleList = new SelectList(new string[] { "Mr", "Miss", "Ms", "Mrs" }); 
viewModel.Title = "Miss"; // Miss will be selected by default 

Un'altra possibile ragione (e quello corretto, sulla base dei commenti qui sotto) è che ViewData["Title"] viene sostituito dal un altro valore. Cambia il nome della proprietà Title in un'altra e tutto dovrebbe funzionare.

+0

Il 'Titolo' ha già un valore durante il caricamento. fa parte del metodo di modifica. – Ruchan

+0

@Ruchan, quindi il valore di 'Title' non corrisponde a uno di quei 4 valori (forse controlla lo spazio bianco), o stai cercando di farlo in un loop –

+4

@Ruchan, è una possibilità che stai impostando il titolo della pagina usando 'Titolo' come chiave:' ViewBag.Title = "Modifica" '? Prova a cambiare il nome della proprietà con qualsiasi altro. – Zabavsky

2

Quando un valore non è specificato (ad esempio "Id"), DropDownListFor a volte non si comporta correttamente. Prova questo:

public class FooModel 
{ 
    public int Id { get; set; } 
    public string Text { get; set; } 
} 

var temp = new FooModel[] 
{ 
    new FooModel {Id = 1, Text = "Mr"}, new FooModel {Id = 2, Text = "Miss"}, 
    new FooModel {Id = 3, Text = "Ms"}, new FooModel {Id = 4, Text = "Mrs"} 
         }; 
ViewBag.TitleList = new SelectList(temp, "Id", "Text", 2); 

EDIT: altra sololution

var temp = new [] 
{ 
    new SelectListItem {Value = "Mr", Text = "Mr"}, new SelectListItem {Value = "Miss", Text = "Miss"}, 
    new SelectListItem {Value = "Ms", Text = "Ms"}, new SelectListItem {Value = "Mrs", Text = "Mrs"} 
}; 
ViewBag.TitleList = new SelectList(temp, "Value", "Text", "Miss"); 
+0

Vedi Ivan, quando risolvi un problema da solo, si chiama _sololution_. –

Problemi correlati