Если вы используете шаблон редактора, вам не стоит об этом беспокоиться, потому что все соглашения об именах будут правильно обрабатываться платформой.Вам также не нужно выполнять какие-либо циклы .Итак, предположим, что у вас есть действие контроллера, которое возвращает IEnumerable<Reminders>
, и вы хотите сгенерировать список выпадающих списков:
public ActionResult Index()
{
var reminders = new[]
{
new Reminders
{
Reminder = new List<SelectListItem>
{
new SelectListItem { Value = "1", Text = "reminder 1" },
new SelectListItem { Value = "2", Text = "reminder 2" },
},
},
new Reminders
{
Reminder = new List<SelectListItem>
{
new SelectListItem { Value = "1", Text = "reminder 1" },
new SelectListItem { Value = "2", Text = "reminder 2" },
new SelectListItem { Value = "3", Text = "reminder 3" },
},
}
};
return View(reminders);
}
Тогда, на ваш взгляд, вы просто:
@model IEnumerable<AppName.Models.Reminders>
@using (Html.BeginForm())
{
@Html.EditorForModel()
<input type="submit" value="OK" />
}
и соответствующий шаблон редактора (~/Views/Home/EditorTemplates/Reminders.cshtml
):
@model AppName.Models.Reminders
@Html.DropDownListFor(
x => x.SelectedReminder,
new SelectList(Model.Reminder, "Value", "Text")
)
Поскольку вы отправили 2 элемента в модель представления, будут сгенерированы 2 раскрывающихся меню, каждое из которых имеет правильное имя, чтобы при отправке назад вы получилисоответствующие выбранные значения:
<select name="[0].SelectedReminder">
<option value="1">reminder 1</option>
<option value="2">reminder 2</option>
</select>
<select name="[1].SelectedReminder">
<option value="1">reminder 1</option>
<option value="2">reminder 2</option>
<option value="3">reminder 3</option>
</select>