Вот соответствующий код. Имейте в виду, я сделал это в Notepad ++ вместо копирования в моем коде для моего проекта на работе. Если я ошибочно набрал имя класса, предположим, что в моем коде не написано опечаток. Ошибок компиляции нет.
Модель:
public class MyViewModel
{
public int SelectedSomething { get; set; }
public IList<int> Somethings { get; set; }
}
Контроллер:
public class MyController
{
public ActionResult Index()
{
var viewModel = new MyViewModel();
viewModel.Somethings = Enumerable.Range(1, 12).ToList();
return View(viewModel);
}
}
Вид (Razor):
@Html.DropDownListFor(x => x.SelectedSomething, new SelectList(Model.Somethings, Model.SelectedSomething), "Select an Option")
Это будет "работать", но не будет устанавливать значения для любого из отображаемых элементов option
в select
:
<select>
<option value="">Select an Option</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
<option>11</option>
<option>12</option>
</select>
Вопрос:
Я знаю, что могу изменить свою модель представления IList<int>
на IList<SelectListItem>
и создать объекты SelectListItem
для представления каждого int
, но это кажется немного смешным (как я думаю, конструктор не должен оставлять значения пробел и должен использовать текст по умолчанию). Я пропустил что-то очевидное здесь, или мне придется отказаться от использования примитивных типов здесь?