2 回答

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超6個(gè)贊
請(qǐng)改用列表,然后將foreach循環(huán)替換為for循環(huán):
@model IList<BlockedIPViewModel>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@for (var i = 0; i < Model.Count; i++)
{
<tr>
<td>
@Html.HiddenFor(x => x[i].IP)
@Html.CheckBoxFor(x => x[i].Checked)
</td>
<td>
@Html.DisplayFor(x => x[i].IP)
</td>
</tr>
}
<div>
<input type="submit" value="Unblock IPs" />
</div>
}
或者,您可以使用編輯器模板:
@model IEnumerable<BlockedIPViewModel>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.EditorForModel()
<div>
<input type="submit" value="Unblock IPs" />
</div>
}
然后定義~/Views/Shared/EditorTemplates/BlockedIPViewModel.cshtml將為集合的每個(gè)元素自動(dòng)呈現(xiàn)的模板:
@model BlockedIPViewModel
<tr>
<td>
@Html.HiddenFor(x => x.IP)
@Html.CheckBoxFor(x => x.Checked)
</td>
<td>
@Html.DisplayFor(x => x.IP)
</td>
</tr>
您在控制器中獲得null的原因是因?yàn)槟蛔袷啬J(rèn)模型綁定程序希望成功綁定到列表的輸入字段的命名約定。我邀請(qǐng)你閱讀following article。
閱讀完后,請(qǐng)結(jié)合我的示例和您的示例查看生成的HTML(更具體地說是輸入字段的名稱)。然后進(jìn)行比較,您將了解為什么您的列表不起作用。
- 2 回答
- 0 關(guān)注
- 764 瀏覽
添加回答
舉報(bào)