Простой: адаптируйте ваши модели представлений в соответствии с требованиями ваших представлений (то есть, чтобы показать список флажков для некоторых ролей), используйте шаблоны редактора и избегайте циклических циклов в ваших представлениях.
Итак:
Просмотр модели:
public class RegisterModel
{
public List<RoleModel> Roles { get; set; }
}
public class RoleModel
{
public string RoleName { get; set; }
public bool Selected { get; set; }
}
Контроллер:
public class HomeController : Controller
{
public ActionResult Index()
{
var model = new RegisterModel
{
Roles = new[]
{
new RoleModel { RoleName = "administrator" },
new RoleModel { RoleName = "developer" },
new RoleModel { RoleName = "janitor :-)" },
}.ToList()
};
return View(model);
}
[HttpPost]
public ActionResult Index(RegisterModel model)
{
// at this stage the model will contain all the
// information you need
return View(model);
}
}
Просмотр (~/Views/Home/Index.cshtml
):
@model RegisterModel
@using (Html.BeginForm())
{
@Html.EditorFor(x => x.Roles)
<button type="submit">OK</button>
}
Шаблон редактора (~/Views/Home/EditorTemplates/RoleModel.cshtml
):
@model RoleModel
<div>
@Html.HiddenFor(x => x.RoleName)
@Html.CheckBoxFor(x => x.Selected)
@Html.LabelFor(x => x.Selected, Model.RoleName)
</div>