具有相同名称的多个DropDownLists(在foreach语句中)

时间:2012-10-30 17:48:09

标签: asp.net-mvc asp.net-mvc-3 html-select

我在加载几个名称相同的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”方法中收到的参数绑定。

我真的很感谢你的帮助。提前谢谢!

1 个答案:

答案 0 :(得分:0)

我认为你应该为每个下拉列表使用不同的名称。假设每个队列都有不同的ID,那么请尝试使用此代码:

<div>@Html.DropDownList("state" + queue.ID, sli)</div>

当然,您需要区分集合中的哪个。 我经常这样做,希望它适合你。