Razor使用集合形成帮助器,如何正确命名表单元素?

时间:2015-04-22 14:32:26

标签: c# .net asp.net-mvc razor form-helpers

我有一个管理器注册的页面,在恢复期间,他们可以添加3个用户。

用户表单是部分的。

视图模型包含一组用户:

public class ManagerRegistrationViewModel
{
  public List<User> Users {get; set;}

  public ManagerRegistrationViewModel()
  {
      Users = new List<User>();
      Users.Add(new User(....));
      Users.Add(new User(....));
      Users.Add(new User(....));
  }
}

public ActionResult  ManagerRegistration()
{
   var vm = new ManagerRegistrationViewModel();

   return View("ManagerRegistration", vm);
}

ManagerRegistration.cshtml:

@using (Html.BeginForm())
{

<div id="users">
    @{  Html.RenderPartial("_User", Model.Users[0]); }
    @{  Html.RenderPartial("_User", Model.Users[1]); }
    @{  Html.RenderPartial("_User", Model.Users[2]); }
</div>


}

我的问题是,部分原因是我目前没有使用Html助手。

例如,文本输入如下:

<input type=text name="Users[0].Name" />

但我想在文本框和下拉列表等中使用Html帮助器,因为对于Edit页面,它设置表单元素的当前值/状态。

如何在此场景中使用Html助手?

表单元素必须命名为:

Users[x].Property

我希望以某种方式继续使用强类型方式:

@Html.TextBoxFor(m => m.Name)

1 个答案:

答案 0 :(得分:1)

对于这些情况,您应该使用EditorTemplates 而不是部分视图,否则您将无法在字段上获得任何正确的命名。

所以你有:

@Html.EditorFor(m => m.Users[0])
@Html.EditorFor(m => m.Users[1])
@Html.EditorFor(m => m.Users[2])

或者更合适的是,在for循环中:

@for (int i = 0; i < Model.Users.Count; i++)
{
    @Html.EditorFor(m => m.Users[i])  
}