IEnumerable <string> в SelectList, не выбрано значение
В приложении ASP.NET MVC есть что-то вроде следующего:
IEnumerable<string> list = GetTheValues();
var selectList = new SelectList(list, "SelectedValue");
И даже подумал, что выбранное значение определено, оно не выбрано в представлении. У меня такое чувство, что я что-то пропустил здесь, поэтому, если кто-то может избавить меня от моих страданий!
Я знаю, что могу использовать раздражающий тип для предоставления ключа и значения, но я бы предпочел не добавлять дополнительный код, если мне не нужно.
EDIT: эта проблема была исправлена с помощью ASP.NET MVC RTM.
Ответы
Ответ 1
Попробуйте это вместо:
IDictionary<string,string> list = GetTheValues();
var selectList = new SelectList(list, "Key", "Value", "SelectedValue");
SelectList (по крайней мере, в Preview 5) недостаточно умен, чтобы увидеть, что элементы IEnumerable являются типами значений, поэтому он должен использовать элемент как для значения, так и для текста. Вместо этого он устанавливает значение каждого элемента в значение "null" или что-то в этом роде. Поэтому выбранное значение не имеет эффекта.
Ответ 2
Если вы просто пытаетесь сопоставить IEnumerable<string>
с SelectList
, вы можете сделать это inline следующим образом:
new SelectList(MyIEnumerablesStrings.Select(x=>new KeyValuePair<string,string>(x,x)), "Key", "Value");
Ответ 3
Взгляните на это: ASP.NET MVC SelectList selectedValue Gotcha
Это хорошее объяснение того, что происходит как любое.
Ответ 4
Попробуйте это
ViewBag.Items = list.Select(x => new SelectListItem()
{
Text = x.ToString()
});