Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 具有相同名称的多个DropDownLists(在foreach语句中)_Asp.net Mvc_Asp.net Mvc 3_Html Select - Fatal编程技术网

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

Asp.net mvc 具有相同名称的多个DropDownLists(在foreach语句中),asp.net-mvc,asp.net-mvc-3,html-select,Asp.net Mvc,Asp.net Mvc 3,Html Select,我在加载几个同名的DropDownList时遇到问题。我在此附上我的代码: 查看: @{ int i = 1 foreach (var queue in Model.Queues) { using (Html.BeginForm("ChangeQueueState", "Home", FormMethod.Post)) { List<SelectListItem> sli = Vi

我在加载几个同名的DropDownList时遇到问题。我在此附上我的代码:

查看:

@{
   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++
}
@{
int i=1
foreach(Model.Queues中的var队列)
{
使用(Html.BeginForm(“ChangeQueueState”、“Home”、FormMethod.Post))
{
列表sli=ViewBag.states[i-1];
@Html.DropDownList(“状态”,sli)
}
}
我++
}
视图中有更多我没有显示的代码

在我的控制器中,我只需更改相应队列的状态,并使用
SelectedListItem
列表加载
ViewBag.states
,其中包含每个队列正确状态为“Selected”的状态列表

问题是,当加载视图时,所有的
DropDownLists
都加载了上次修改的状态。例如,如果我将第5个队列从“打开”更改为“关闭”,则所有
DropDownLists
都会显示,并选择了“
Closed
”选项(尽管在DB中正确应用了更改)

我认为问题是由于MVC在
DropDownList
名称和关联的
SelectListItem
之间进行绑定,但我无法将DDL名称更改为
“state”+@I
,因为state绑定到控制器的“
ChangeQueueState
”方法中接收的参数


我非常感谢你的帮助。提前谢谢

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

<div>@Html.DropDownList("state" + queue.ID, sli)</div>
@Html.DropDownList(“状态”+queue.ID,sli)
当然,您需要区分集合中的哪个是哪个。
我经常这样做,希望它能为你工作。

好吧,EditorFor helper是为这样的情况设计的。您将需要一个编辑器模板来重新发送任何“模型”,在该模板中,您将再次使用EditorFor重新发送每个“队列”。使模型绑定器工作的命名约定是“Queues[#].state”,其中#是列表中的索引。当您的视图显示一个模型,并且您试图发布到另一个操作的表单接受不同类型的模型时,会使事情变得复杂,因为命名约定将关闭(如您所见)