Этот код выглядит просто ужасно во всех мыслимых аспектах (ИМХО конечно). Я понятия не имею, почему это не работает, и я не хочу знать. Все, что я могу сделать, - это предложить вам, как его улучшить (так что вы можете прекратить читать этот пост, если вы ищете решение о том, почему ваш код не работает, так как я не имею ни малейшего представления).
Итак, первым улучшением было бы избавиться от любого ViewData
и ввести модель представления:
public class MyViewModel
{
public string SelectedValue { get; set; }
public IEnumerable<SelectListItem> Items { get; set; }
}
тогда у меня будет действие контроллера, которое заполняет эту модель представления:
public ActionResult Index()
{
var model = new MyViewModel
{
// I want to preselect the second value
SelectedValue = "No",
Items = new[]
{
new SelectListItem { Value = "Yes", Text = "yeap !" },
new SelectListItem { Value = "No", Text = "nope !" },
}
};
return View(model);
}
и в моем строго типизированном представлении я просто привязал бы помощника к модели представления:
<%= Html.DropDownListFor(
x => x.SelectedValue,
new SelectList(Model.Items, "Value", "Text")
) %>
Также, если вы хотите работать с некоторыми типами перечислений, вам может пригодиться следующий метод расширения .
Видите, как это просто? Нет больше уродливых приведений с ViewData
, больше не нужно определять какие-либо списки и указывать некоторые сложные условия, ...
Примечание: еще раз, это только мои 2 ¢, вы можете продолжить бой с ViewData
, если хотите.