如果您使用的是編輯器模板,您不應該擔心這一點,因爲框架會正確處理所有命名約定。你也不應該做任何循環。因此,假設你有一個返回值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個下拉列表中產生的每一個與一個correc t的名稱,以便當你回發你會得到相應的選定的值:
<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>
我有問題得到那個工作,因爲我的看法有點不同。我的強類型視圖是一個ViewModel,其中包含一個ReminderViewModel列表,其中包含我在OP中發佈的Reminder類的內容。所以提醒類實際上是我的ViewModel。 – chobo2 2011-02-05 21:55:52