web-dev-qa-db-fra.com

Problème avec ASP.Net MVC SelectLIst et List <SelectListItems>

J'étends 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.

La première boucle foreach fonctionne bien. Cependant, lorsque je crée la SelectList réelle et que je passe dans 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();
}
25
Ted

Vous devez modifier la ligne où vous la créez pour lui indiquer où rechercher les valeurs. Dans votre cas, ce serait:

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

Cependant, cela ne reportera pas l'élément sélectionné. Dans ce cas, vous devrez déterminer quel élément doit être sélectionné et transmettre sa valeur via le quatrième paramètre.

Voici 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 pourriez également vouloir vérifier ce SO qui pourrait être utile.

Edit: Je viens de voir votre commentaire, et cela ne fonctionne pas car il n'est pas assez intelligent pour savoir rechercher les champs Text et Value par défaut. Vous pouvez lui passer un type d'objets et cela vous donne la possibilité de vous y lier en définissant les propriétés à mapper aux propriétés Text et Value.

54
Kelsey