是否可以在asp.net MVC4中使用foreach循环建模绑定?

D1v*_*1v3 3 asp.net-mvc-4

在研究这个问题时,我发现了一种绑定list属性的可靠方法.

看这里的例子:


不幸的是,迭代列表并没有给我所有我需要的功能.

此代码示例适用于Get

      @foreach (Period period in Model.PeriodList)
        {
            <div> @Html.TextBoxFor(u => period.PeriodStartNumber) </div>
            <div> @Html.TextBoxFor(u => period.PeriodEndNumber) </div>
        }
Run Code Online (Sandbox Code Playgroud)

但是这些控件中的值不会绑定在Post上,而且我无法更新我的模型.

这是框架的限制因而不可能吗?

Raj*_*ddy 8

@foreach (Period period in Model.PeriodList)
        {
            <div> @Html.TextBoxFor(u => period.PeriodStartNumber) </div>
            <div> @Html.TextBoxFor(u => period.PeriodEndNumber) </div>
        }
Run Code Online (Sandbox Code Playgroud)

这里发生的是,假设您的PeriodList有3个值并且循环执行3次,现在进入该 @Html.TextBoxFor(u => period.PeriodStartNumber) 部分,这将创建一个带有NAME 的文本框,PeriodStartNumber或者有时period.PeriodStartNumber为MVC将值绑定到模型,html元素标记名称必须与您的匹配模型字段(并且您还有3个具有相同名称的文本框 - >如果您想要隐式绑定值,这不是很好).所以现在我重新判断你的模型中没有名称为PeriodStartNumber的字段但是你有PeriodList即.在DOM中没有名称为PeriodList的元素与模型属性绑定,因此MVC不会绑定它.

只需在控制器后期操作中保留一个参数即可

public ActionResult SomeAction(Model myModel, string[] PeriodStartNumber )
{
}
Run Code Online (Sandbox Code Playgroud)

您将具有绑定到PeriodStratNumber的值.

注意: Important thing to know while playing with MVC. Always make sure the Html element tag name and the model field name are the same. Only then binding will be done by MVC