【问题标题】:Non-Sequential Indices Model Binding非序列索引模型绑定
【发布时间】:2016-04-20 19:26:32
【问题描述】:

数据我正在尝试绑定非连续项目的列表。

我的观点

@for (int i = 0; i < Model.Data.Count; i++)
{
    <tr>
            @for (int j = 0; j < Model.Data[i].Count; j++)
             {
              <td class="col-md-2">
              <input type="hidden" name="Data.Index" value="i.ToString()+j.ToString()" />

             @Html.TextBoxFor(m => Model.Data[i][j].HEAD_COUNT_WRKLD)
             @Html.HiddenFor(m => Model.Data[i][j].WORKLOAD_DETAIL_ID)
             @Html.HiddenFor(m => Model.Data[i][j].MONTH)
             @Html.HiddenFor(m => Model.Data[i][j].WORKLOAD_ID)

                                </td>
                            }
                        </tr>
                    }

给定回发值:

Data[0][0].HEAD_COUNT_WRKLD:5
Data[0][0].WORKLOAD_DETAIL_ID:37
Data[0][0].MONTH:1
Data[0][0].WORKLOAD_ID:29
Data[0][8].HEAD_COUNT_WRKLD:48
Data[0][8].WORKLOAD_DETAIL_ID:
Data[0][8].MONTH:9
Data[0][8].WORKLOAD_ID:29
Data[2][1].HEAD_COUNT_WRKLD:7
Data[2][1].WORKLOAD_DETAIL_ID:2
Data[2][1].MONTH:2
Data[2][1].WORKLOAD_ID:1
Data[2][3].HEAD_COUNT_WRKLD:67
Data[2][3].WORKLOAD_DETAIL_ID:4
Data[2][3].MONTH:4
Data[2][3].WORKLOAD_ID:1

还有一个控制器方法:

public ActionResult SaveChangeChiefDetails(List<List<ETSDetailDto>> Data)
{}

绑定似乎对我不起作用,参数总是包含缺失数据。我错过了什么吗?

我正在使用 ASP.NET MVC 5。

【问题讨论】:

  • 默认情况下,索引器必须从零开始并且是连续的。除非还发布了索引器的值,否则您不能绑定非顺序索引器。参考Model Binding To A List
  • 但是我的模型是二维数组,如何使用索引器?我需要一个例子。
  • 为什么是二维数组?有什么意义?
  • 我试过了但没用。
  • 它只需要name="Index" 但这不适用于您的二维数组。您实际上是如何生成这些数据的(显示您的观点)?

标签: asp.net-mvc


【解决方案1】:

默认情况下,DefaultModelBinder 只会绑定索引器从零开始且连续的集合,除非您还为索引器提交值。

在您的情况下,您发布非连续索引器,因此您需要 2 个输入来定义索引器,一个用于外部集合,一个用于内部(嵌套)集合。

@for (int i = 0; i < Model.Data.Count; i++)
{
    // outer collection indexer
    <input type="hidden" name="Data.Index" value="@i" />
    @for (int j = 0; j < Model.Data[i].Count; j++)
    {
        // inner collection indexer
        <input type="hidden" name="Data[@i].Index" value="@j" />
        @Html.TextBoxFor(m => Model.Data[i][j].HEAD_COUNT_WRKLD)
        ....
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 2019-10-22
    • 2015-07-17
    • 1970-01-01
    相关资源
    最近更新 更多