绑定数组ASP MVC

时间:2014-07-21 13:43:48

标签: c# asp.net-mvc razor

我有一个模特

public class person
{
    public string name {get; set;}
    public int age{get; set;}
    public List<int> Keys {get; set;}
}

在我看来,我有这段代码

@using Person

<form id= "form1" action = "@Url.Action("Update", Model)" method ="@FormMethod.Post">
   @Html.editorfor(x => x.name);
   @Html.editorfor(x => x.address);

   @for(var i = 0; i < Model.Keys.Count; i++)
   {
     @Html.Hiddenfor(x => x.Keys[i]);
   }
</form>

我的控制器代码是

public ActionResult Update(Person p)
{
  //the person key is equal to the person age
  p.Keys.Add(p.age);

  return View(p);
}

这会将键的值返回给模型,但我需要保留Keys的所有值,当用户再次提交表单时,Keys数组为null。对于我的任务,我需要键来保持该视图的所有记录年龄变化,而不仅仅是最新的。为什么我的模型没有绑定或记住数组为什么每次提交表单时都会忘记数组值?我以为我绑定了它,它不应该为null,而是为Keys输入所有值。

2 个答案:

答案 0 :(得分:1)

在视图中,尝试以这种方式定义隐藏键:

@for(var i = 0; i < Model.Keys.Count; i++)
{
  @Html.Hidden("Keys", Model.Keys[i])
}

我不确定,但是HiddenFor方法可能会为模型绑定器设置字段名称,以便识别它。也许它只适用于复杂类型的集合。

答案 1 :(得分:0)

我会使用IList而且还需要再次重新初始化Person.Keys属性。例如,访问this post

示例

public ActionResult Update(Person p, IList<int> keys)
{
    p.Keys = keys;
    return View(p);
}