将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");
    } 

将IEnumerable列表传递给控制器

问题实际上是这个表达式:

@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<>或数组来键入视图,以允许这种行为。