通过IEnumerable的名单控制器 [英] Pass IEnumerable list to controller

查看:145
本文介绍了通过IEnumerable的名单控制器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的asp.net MVC 4项目,我试图从视图中传递的IEnumerable列表控制器。问题是,在动作列表receiverd为空。任何帮助,请。

这是我的code的一部分

查看:

  @model IEnumerable的< PFEApplication.Models.agent>
< D​​IV ID =领袖>
@using(Ajax.BeginForm(AddNewLeader,队报,FormMethod.Post,新AjaxOptions {
                    UpdateTargetId =领头羊,
                    列举HTTPMethod =邮报,
                    InsertionMode = InsertionMode.Replace
                    }))
  {
    的foreach(在型号VAR项)
    {
       @ Html.HiddenFor(modelItem => item.ID_agent)
       @ Html.RadioButtonFor(modelItem => item.SelectedAgent,item.ID_agent)       @ Html.DisplayFor(modelItem => item.nom_agent)
       @ Html.DisplayFor(modelItem =方式>项目prenom_agent)
        < BR />      }
      < BR />
     <输入类型=提交值=保存/>
     }
     < / DIV>

控制器:

 公众的ActionResult AddNewLeader(IEnumerable的<剂> ListAgent)
    {
            [...]
            如果(ListAgent!= NULL)
            的foreach(在ListAgent变种AG){
                如果(ag.SelectedAgent!= 0){ID = ag.SelectedAgent; }
            }
            剂agentRemplace = db.agents.Single(一个= GT; a.ID_agent == ID);
            db.SaveChanges();        返回PartialView(exitAddNewLeader);
    }


解决方案

问题是事实,这当然pression:

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

和类似以及用于HTML输入控制不能导出正确的名称,所得的请求参数不被模型粘合剂解析。通常这是取代固定的foreach

  @fore(INT I = 0; I< Model.Count;我++)
{
   @ 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&LT键入或数组允许这种行为

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

解决方案

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.

这篇关于通过IEnumerable的名单控制器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆