asp.net-mvc - 为什么带有 IList for editor 的 ASP.NET MVC 4 不能正确编写索引符号?

标签 asp.net-mvc asp.net-mvc-4

我遇到了一种特殊情况,在编辑器模板中引用“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/

相关文章:

asp.net-mvc-4 - ASP.NET MVC 4 OAuthWebSecurity 不起作用

asp.net-mvc - ASP.NET MVC 属性路由

javascript - 将 jQuery 禁用输入值发送到 MVC Controller

asp.net-mvc - 具有 OpenId 选项的 MVC 个人用户帐户

c# - 将复杂对象模型绑定(bind)到 View

C# 不四舍五入

asp.net-mvc - 错误 2002 : The EntityContainer 'X' for the storage model specified as part of this MSL does not exist in MetadataWorkspace

c# - 为什么我的 View 不使用 EditorTemplates 文件夹来执行创建操作?

c# - 想要来自 for 循环的 @Html.HiddenFor 不同的值

asp.net-mvc-4 - Umbraco Surface Controller 和 API Controller 的区别