我在加载几个名称相同的DropDownLists时遇到了麻烦。我在这里附上我的代码:
查看:
@{
int i = 1
foreach (var queue in Model.Queues)
{
using (Html.BeginForm("ChangeQueueState", "Home", FormMethod.Post))
{
List<SelectListItem> sli = ViewBag.states[i - 1];
<div>@Html.DropDownList("state", sli)</div>
}
}
i++
}
视图中有更多我没有显示的代码。
在我的控制器中,我只需更改相应队列的状态,并使用列表ViewBag.states
加载SelectedListItem
,其中包含状态列表,每个队列的状态为“已选择”。 / p>
问题是加载View时,所有DropDownLists
都加载了上次修改状态。例如,如果我将第5个队列从“打开”更改为“已关闭”,则会显示所有DropDownLists
并选择“Closed
”选项(尽管在数据库中正确应用了更改)。 / p>
我认为问题是由于MVC在DropDownList
名称与SelectListItem
关联之间所做的绑定,但我无法将DDL名称更改为"state" + @i
,因为状态与我的控制器的“ChangeQueueState
”方法中收到的参数绑定。
我真的很感谢你的帮助。提前谢谢!
答案 0 :(得分:0)
我认为你应该为每个下拉列表使用不同的名称。假设每个队列都有不同的ID,那么请尝试使用此代码:
<div>@Html.DropDownList("state" + queue.ID, sli)</div>
当然,您需要区分集合中的哪个。 我经常这样做,希望它适合你。