我遇到了一种特殊情况,在编辑器模板中引用“model”会产生格式错误的索引“name”字段:
编辑
@model IList<BillingRateItem>
@for (int i = 0;i < this.Model.Count(); i++)
{
@Html.HiddenFor(m => this.Model[i].BillingRateItemID)
}
生成的隐藏字段在索引之前包含一个句点,这是有问题的:
HTML 呈现
<input id="Model_BillingRateItems__0__BillingRateItemID" name="Model.BillingRateItems.[0].BillingRateItemID" type="hidden" value="9">
我想要渲染的内容
请注意,“Model.BillingRateItems[0]”的名称和索引之间没有句点。这很好!
<input id="Model_BillingRateItems__0__BillingRateItemID" name="Model.BillingRateItems[0].BillingRateItemID" type="hidden" value="9">
编辑 - 这是调用编辑器的 View 示例
@model BillingRateViewModel // has multiple BillingRateItems
@Html.EditorFor(m=>m.BillingRateItems,"BillingRateItemsGrid")
注意: 当我更改编辑器以接受父对象(例如 BillingRate)时,索引工作正常。也许结论只是所有编辑器都以“.”开头。无论上下文如何。对于枚举,它将添加“.[].”即使这对 native 模型绑定(bind)器没有帮助重建对象。
最佳答案
我不确切知道您正在使用的 MVC 程序集版本存在问题,但看起来像是一些我无法在您可以从 Visual Studio 扩展安装的最新版本上重现的错误,并且更新菜单。
您可以使用@Html.Hidden
这样创建这个隐藏字段:
@Html.Hidden("[" + i + "].BillingRateItemID", this.Model[i].BillingRateItemID);
生成的 HTML 看起来像这样,其中 i
将是每个项目的索引,该值将采用 BillingRateItemID
:
<input name="[1].BillingRateItemID" type="hidden" value="1">
然后默认的 Model Binder 将正确处理该列表。
关于asp.net-mvc - 为什么带有 IList for editor 的 ASP.NET MVC 4 不能正确编写索引符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20725087/