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

时间:2014-02-04 02:10:12

标签: asp.net-mvc-4

在研究这个问题时,我找到了一种绑定列表属性的可靠方法。

请参见此处的示例:


不幸的是,遍历列表并不能提供我需要的所有功能。

此代码示例适用于获取

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

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

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

1 个答案:

答案 0 :(得分:7)

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

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

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

period.PeriodStartNumber

您将具有绑定到PeriodStratNumber的值。

注意: public ActionResult SomeAction(Model myModel, string[] PeriodStartNumber ) { }