带有集合的 Razor 表单助手,如何正确命名表单元素?
Razor form helpers with a collection, how to name form elements correctly?
我有一个经理注册的页面,在恢复期间他们可以添加 o 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 助手,因为对于编辑页面,它设置表单元素的当前 value/state。
如何在此场景中使用 Html 助手?
表单元素必须命名为:
Users[x].Property
理想情况下,我希望以某种方式继续使用强类型方式,例如:
@Html.TextBoxFor(m => m.Name)
对于这些情况,您应该使用 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])
}
我有一个经理注册的页面,在恢复期间他们可以添加 o 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 助手,因为对于编辑页面,它设置表单元素的当前 value/state。
如何在此场景中使用 Html 助手?
表单元素必须命名为:
Users[x].Property
理想情况下,我希望以某种方式继续使用强类型方式,例如:
@Html.TextBoxFor(m => m.Name)
对于这些情况,您应该使用 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])
}