在我的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");
}
答案 0 :(得分:1)
问题实际上是这个表达式:
@Html.HiddenFor(modelItem => item.ID_agent)
,类似的也无法为HTML输入控件派生正确的名称,并且模型绑定器不会解析生成的请求参数。通常,将foreach
替换为for
:
@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<>
或数组键入您的视图才能允许此行为。