Asp.net mvc 为什么使用IList for editor的ASP.NET MVC 4不能正确编写索引符号?

Asp.net mvc 为什么使用IList for editor的ASP.NET MVC 4不能正确编写索引符号?,asp.net-mvc,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) } @model BillingRateViewModel // has multiple Billi

我有一种特殊情况,在编辑器模板中引用“model”会生成格式不正确的索引“name”字段:

编辑器

@model IList<BillingRateItem>

@for (int i = 0;i < this.Model.Count(); i++)
{
    @Html.HiddenFor(m => this.Model[i].BillingRateItemID)
}
@model BillingRateViewModel // has multiple BillingRateItems

@Html.EditorFor(m=>m.BillingRateItems,"BillingRateItemsGrid")
注:
当我更改编辑器以接受父对象(例如BillingRate)时,索引工作正常。也许结论只是所有的编辑都会以“.”开头,不管上下文如何。在可枚举的情况下,它将添加“.[]”,即使本机模型绑定器对重建对象没有帮助。

我不知道您使用的MVC程序集版本到底有什么问题,但是看起来有些bug我无法在最新版本上重现,您可以从VisualStudioExtensions and Updates菜单安装这些bug

您可以使用
@Html.hidden
创建此隐藏字段,方法如下:

@Html.Hidden("[" + i + "].BillingRateItemID", this.Model[i].BillingRateItemID);
生成的HTML将如下所示,其中
i
将是每个项目的索引,并且该值将采用
BillingRateItemID

<input name="[1].BillingRateItemID" type="hidden" value="1"> 

然后,默认的模型绑定器将正确处理列表。

试试这种方法

@model IList<BillingRateItem>

@for (int i = 0;i < this.Model.Count(); i++)
{  

    <input name="Model.BillingRateItems["+@i+"].BillingRateItemID[] type="hidden" value="1"> 
}
@model-IList
@for(int i=0;i我尝试了与您完全相同的方法,结果HTML是name=“[].BillingRateItemID”,这将为默认模型绑定器正确绑定!您使用的是哪一版本的ASP.NET?您有Web Update v4吗?我在谷歌上搜索了Web Update v4,但我不太清楚您的意思。我有MVC 4(版本4.0.20713.0)已安装。您的版本已过时!好的…很高兴知道。谢谢提醒。我会在早上更新它。使用foreach而不是loopMVC5修复了此问题!因此,当在编辑器中将MVC4与可枚举属性一起使用时,生成的名称错误地将括号放在“点”后,名称看起来像。[]..MVC5将其更正为[]…感谢所有的帮助和解决方法。手动构造名称是一个选项(尽管很难看)。
<input name="[1].BillingRateItemID" type="hidden" value="1"> 
@model IList<BillingRateItem>

@for (int i = 0;i < this.Model.Count(); i++)
{  

    <input name="Model.BillingRateItems["+@i+"].BillingRateItemID[] type="hidden" value="1"> 
}