Pass IEnumerable list to controller

2020-02-14 17:00发布

In my asp.net MVC 4 project, I'm trying to pass IEnumerable list from view to controller. The problem is that the list receiverd in the action is null. Any help please.

This is part of my code

view :

@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>

Controller :

     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条回答
该账号已被封号
2楼-- · 2020-02-14 17:46

The problem is in fact that this expression:

@Html.HiddenFor(modelItem => item.ID_agent)

and similar as well cannot derive a correct name for the HTML input control, and the resulting request parameters are not parsed by model binder. Usually this is fixed by replacing foreach with 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 />           

}

Note that you would need your view to be typed with IList<> or an array to allow this behavior.

查看更多
登录 后发表回答