Reputation: 55
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");
}
Upvotes: 2
Views: 2812
Reputation: 56688
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.
Upvotes: 1