我有一个数组,我想绑定到下拉列表。这是代码:
@for (int i = 1; i <= 5; i++)
{
@for (int j = 1; j <= 7; j++)
{
@Html.DropDownListFor(m => @Model.Periods, new SelectList(@Model.Items, "Id", "Title", @Model.ScheduleList[i, j]))
}
}
@ Model.Periods是一个普通的空整数数组。 @ Model.ScheduleList是一个二维整数数组,它包含应该在绑定时选择的选项的值。 如果我更换:
@Model.Periods
使用:
@Model.Periods[i*10 + j]
正在显示所选的值,但生成的选择输入的名称类似于例如期间[34],而不仅仅是期间,我在视图模型中得到 null 回发。 所以我的问题是:如何将oridnary数组绑定到dropdown并将选定的值传递给另一个数组?
答案 0 :(得分:1)
@ Model.Periods [i * 10 + j]不是100%正确 - 要将这些数据发布到您的COntroller,您必须将所有值从Periods[0]
直接发送回Periods[5 * 7 - 1]
如果Periods[X]
(其中X包含0到34)中的任何一个将丢失,则您将无法获得正确的数据。数组的索引也应严格从0开始。
例如:
Periods[0] = 1
Periods[1] = 2
Periods[2] = 3
Periods[4] = 4
将绑定到以下数组:[1, 2, 3]
,因为没有有效负载项,顺序索引在2到4之间。
对于有效载荷:
Periods[1] = 1
Periods[2] = 2
Periods[3] = 3
Periods[4] = 4
结果将是null
- 有效负载中缺少数组的第一个索引。
所以对你来说@Model.Periods[(i-1)*10 + (j-1)]
可能没问题。
如果你真的需要你的索引是非顺序的,你可以使用这个解决办法:为每个元素添加隐藏字段:
<input type="hidden" name="Periods.Index" value="{your index}" />
所以你的代码会这样:
@for (int i = 1; i <= 5; i++)
{
@for (int j = 1; j <= 7; j++)
{
<input type="hidden" name="Periods.Index" value="@(i * j)" />
@Html.DropDownListFor(m => @Model.Periods, new SelectList(@Model.Items, "Id", "Title", @Model.ScheduleList[i, j]))
}
}
但是这不适用于您当前的场景。有关索引器的更多信息可以在网上找到 - 例如。在http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/