Asp.net mvc 具有相同名称的多个DropDownLists(在foreach语句中)
我在加载几个同名的DropDownList时遇到问题。我在此附上我的代码: 查看: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
@{
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”,其中#是列表中的索引。当您的视图显示一个模型,并且您试图发布到另一个操作的表单接受不同类型的模型时,会使事情变得复杂,因为命名约定将关闭(如您所见)