我猜你的意思(具有role1上四次似乎有點不可思議):
Role1 true
Role1 false
Role2 true
Role2 false
Name1 "Name 1"
Name2 "Name2"
你可以使用一個視圖模型:
public class MyViewModel
{
public bool Role1 { get; set; }
public bool Role2 { get; set; }
public string Name1 { get; set; }
public string Name2 { get; set; }
}
然後:
[HttpPost]
public ActionResult GetPostData(MyViewModel model)
{
...
}
因爲我懷疑你正在做複選框的東西(由於每個角色的雙布爾值,因爲CheckBox助手會生成一個hidd EN場),這裏是什麼,我會建議你:
型號:
public class RoleViewModel
{
public bool IsSelected { get; set; }
public string Name { get; set; }
}
public class EditRolesViewModel
{
public RoleViewModel[] Roles { get; set; }
}
控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
var model = new EditRolesViewModel
{
Roles = new[]
{
new RoleViewModel { Name = "Role 1", IsSelected = true },
new RoleViewModel { Name = "Role 2", IsSelected = false },
new RoleViewModel { Name = "Role 3", IsSelected = true },
}
};
return View(model);
}
[HttpPost]
public ActionResult Index(EditRolesViewModel model)
{
return View(model);
}
}
查看:
@model EditRolesViewModel
@using (Html.BeginForm())
{
for (int i = 0; i < Model.Roles.Length; i++)
{
<div>
@Html.HiddenFor(x => x.Roles[i].Name)
@Html.LabelFor(x => x.Roles[i].IsSelected, Model.Roles[i].Name)
@Html.CheckBoxFor(x => x.Roles[i].IsSelected)
</div>
}
<button type="submit">OK</button>
}
,甚至更好,使用編輯器模板這將針對每個角色呈現:
@model EditRolesViewModel
@using (Html.BeginForm())
{
@Html.EditorFor(x => x.Roles)
<button type="submit">OK</button>
}
和編輯模板(~/Views/Shared/EditorTemplates/RoleViewModel.cshtml
):
@model RoleViewModel
<div>
@Html.HiddenFor(x => x.Name)
@Html.LabelFor(x => x.IsSelected, Model.Name)
@Html.CheckBoxFor(x => x.IsSelected)
</div>
好得多的建模,謝謝 – Elena 2012-03-08 10:33:34
好的是,你可以添加一個額外的字段(例如'Id')到你的ViewModel,然後你所需要的就是更新自定義編輯器(添加一個新的隱藏字段。 )甜。 – 2013-09-18 04:07:11