为什么ASP.NET MVC 4与IList for editor不能正确编写索引表示法?

Bla*_*ack 5 asp.net-mvc asp.net-mvc-4

我有一个奇怪的情况,在我的编辑器模板中引用'模型会产生格式错误的索引'名称'字段:

编辑

@model IList<BillingRateItem>

@for (int i = 0;i < this.Model.Count(); i++)
{
    @Html.HiddenFor(m => this.Model[i].BillingRateItemID)
}
Run Code Online (Sandbox Code Playgroud)

产生的隐藏字段包括索引之前的一段时间,这是有问题的:

HTML已呈现

<input id="Model_BillingRateItems__0__BillingRateItemID" name="Model.BillingRateItems.[0].BillingRateItemID" type="hidden" value="9">
Run Code Online (Sandbox Code Playgroud)

我想要的是什么

请注意,'Model.BillingRateItems [0]'在名称和索引之间没有句点.这很好!

<input id="Model_BillingRateItems__0__BillingRateItemID" name="Model.BillingRateItems[0].BillingRateItemID" type="hidden" value="9">
Run Code Online (Sandbox Code Playgroud)

编辑 - 这是调用编辑器的视图的示例

@model BillingRateViewModel // has multiple BillingRateItems

@Html.EditorFor(m=>m.BillingRateItems,"BillingRateItemsGrid")
Run Code Online (Sandbox Code Playgroud)

注意:当我更改编辑器以接受父对象(例如BillingRate)时,索引工作正常.也许结论只是所有编辑都会以''开头.无论背景如何.在Enumerables的情况下,它将添加'.[].' 即使这样做本机模型绑定器也没有帮助重建对象.

Fal*_*als 2

我不确切知道您正在使用的 MVC 程序集版本存在问题,但看起来像是一些我无法在您可以从 Visual Studio 扩展和更新菜单安装的最新版本上重现的错误。

您可以使用@Html.Hidden以下方式创建此隐藏字段:

@Html.Hidden("[" + i + "].BillingRateItemID", this.Model[i].BillingRateItemID);
Run Code Online (Sandbox Code Playgroud)

生成的 HTML 看起来像这样,其中i每个项目的索引和值将假设为BillingRateItemID

<input name="[1].BillingRateItemID" type="hidden" value="1"> 
Run Code Online (Sandbox Code Playgroud)

然后默认的 Model Binder 将正确处理该列表。