Такие вещи хорошо достигаются с помощью шаблонов редактора. Они также мешают вам писать код спагетти в ваших взглядах. Пример:
Модель:
public class UserDetailsModel
{
public IEnumerable<UserRoleModel> Roles { get; set; }
}
public class UserRoleModel
{
public string Role { get; set; }
public bool UserRole { get; set; }
}
Контроллер:
public class HomeController : Controller
{
public ActionResult Index()
{
return View(new UserDetailsModel
{
// Fill with some dummy stuff
Roles = Enumerable.Range(1, 5).Select(x => new UserRoleModel
{
Role = "role " + x,
UserRole = false
})
});
}
[HttpPost]
public ActionResult Index(UserDetailsModel model)
{
return View(model);
}
}
Просмотр (~/Views/Home/Index.cshtml
):
@model AppName.Models.UserDetailsModel
@using (Html.BeginForm())
{
@Html.EditorFor(x => x.Roles)
<input type="submit" value="OK" />
}
Шаблон редактора (~/Views/Home/EditorTemplates/UserRoleModel.cshtml
):
@model AppName.Models.UserRoleModel
@Html.CheckBoxFor(x => x.UserRole)
@Html.LabelFor(x => x.Role, Model.Role)
@Html.HiddenFor(x => x.Role)
Теперь это то, что я называю чистыми вещами.