Полагаю, вы имели в виду (так как наличие 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 генерирует скрытое поле), вот что я вам предложу:
Модель:
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>