将IEnumerable列表传递给控制器

时间:2014-04-25 17:00:11

标签: c# asp.net asp.net-mvc-4 ienumerable

在我的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");
    } 

1 个答案:

答案 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<>或数组键入您的视图才能允许此行为。