将IEnumerable列表传递给控制器
本文关键字:控制器 IEnumerable 列表 | 更新日期: 2023-09-27 18:00:23
在我的asp.net MVC 4项目中,我试图将IEnumerable列表从视图传递到控制器。问题是操作中接收的列表为空。请帮忙。
这是我的代码的一部分
视图:
@model IEnumerable<PFEApplication.Models.agent>
<div id="Leader">
@using (Ajax.BeginForm("AddNewLeader", "Equipe", FormMethod.Post, new AjaxOptions {
UpdateTargetId = "Leader",
HttpMethod = "Post",
InsertionMode = InsertionMode.Replace
}))
{
foreach (var item in Model)
{
@Html.HiddenFor(modelItem => item.ID_agent)
@Html.RadioButtonFor(modelItem => item.SelectedAgent, item.ID_agent)
@Html.DisplayFor(modelItem => item.nom_agent)
@Html.DisplayFor(modelItem => item.prenom_agent)
<br />
}
<br />
<input type="submit" value="Save" />
}
</div>
控制器:
public ActionResult AddNewLeader(IEnumerable<agent> ListAgent)
{
[...]
if(ListAgent!=null)
foreach (var ag in ListAgent) {
if (ag.SelectedAgent != 0) { Id = ag.SelectedAgent; }
}
agent agentRemplace = db.agents.Single(a => a.ID_agent == Id);
db.SaveChanges();
return PartialView("exitAddNewLeader");
}
问题实际上是这个表达式:
@Html.HiddenFor(modelItem => item.ID_agent)
和类似的也不能导出HTML输入控件的正确名称,并且所得到的请求参数不会被模型绑定器解析。通常通过用for
:替换foreach
来修复此问题
@fore (int i=0; i<Model.Count; i++)
{
@Html.HiddenFor(modelItem => modelItem[i].ID_agent)
@Html.RadioButtonFor(modelItem => modelItem[i].SelectedAgent, modelItem[i].ID_agent)
@Html.DisplayFor(modelItem => modelItem[i].nom_agent)
@Html.DisplayFor(modelItem => modelItem[i].prenom_agent)
<br />
}
请注意,您需要使用IList<>
或数组来键入视图,以允许这种行为。