2010-06-30 9 views
21

J'étire un Enum et, étant donné le code suivant, selectListItems est une Liste générique de SelectListItems qui a toutes les valeurs correctes pour mon Enum.Problème avec ASP.Net MVC SelectLIst et List <SelectListItems>

La première boucle foreach fonctionne correctement. Toutefois, lorsque je crée la SelectList réelle et transmettez selectListItems, toutes les valeurs sont perdues. Comment puis-je conserver ces valeurs intactes?

foreach (SelectListItem item in selectListItems) 
{ 
    string tex = item.Text; 
    string val = item.Value; 
    string sel = item.Selected.ToString(); 
} 

SelectList selectList = new SelectList(selectListItems); 

foreach (SelectListItem slid in selectList) 
{ 
    string tex = slid.Text; 
    string val = slid.Value; 
    string sel = slid.Selected.ToString(); 
} 
+1

SelectList selectList = nouveau SelectList (selectListItems, "Text", "Value"); Cela fonctionne. Je ne sais pas pourquoi ça ne marche pas sans ça. N'importe qui? – Ted

Répondre

50

Vous devez modifier la ligne où vous l'avez construit pour lui indiquer où rechercher les valeurs. Dans votre cas, ce serait:

SelectList selectList = new SelectList(selectListItems, "Value", "Text"); 

Ceci ne sera pas répercuté sur l'élément sélectionné. Dans ce cas, vous devrez déterminer quel élément doit être sélectionné et transmettre sa valeur par l'intermédiaire du paramètre.

est un exemple:

List<SelectListItem> items = new List<SelectListItem>(); 
items.Add(new SelectListItem() { Text = "Test1", Value = "1", Selected = false }); 
items.Add(new SelectListItem() { Text = "Test8", Value = "8", Selected = true }); 
items.Add(new SelectListItem() { Text = "Test3", Value = "3", Selected = false }); 
items.Add(new SelectListItem() { Text = "Test5", Value = "5", Selected = false }); 

SelectList sl = new SelectList(items, "Value", "Text", "8"); 

Vous pouvez également consulter this SO thread qui pourrait être utile.

Editer: Vous n'avez vu que votre commentaire, et cela ne fonctionne pas car il n'est pas assez intelligent pour savoir comment rechercher les champs Text et Value par défaut. Vous pouvez lui transmettre un type d'objets et vous donner la possibilité de lier en définissant les propriétés à mapper aux propriétés Text et Value.