I\'m really struggling to wrap my head around this:
I have a UserModel and a UserRoleModel:
public class UserModel
{
[Required]
[Display(Name
The CheckBoxFor helper operates with boolean properties. So you could define a view model:
public class RoleViewModel
{
public string Name { get; set; }
public bool Selected { get; set; }
}
and then modify the AllRoles property on your view model:
public class UserRoleModel
{
public IEnumerable AllRoles { get; set; }
public UserModel user { get; set; }
public UserRoleModel()
{
this.AllRoles = Roles.GetAllRoles().Select(r => new RoleViewModel
{
Name = r
});
this.user = new UserModel();
}
}
and in the view instead of writing foreach
loops use an editor template:
@Html.EditorFor(x => x.AllRoles)
and finally define an editor template for the RoleViewModel
type which will be automatically rendered for each element of the AllRoles
collection (~/Views/Shared/EditorTemplates/RoleViewModel.cshtml
)
@model RoleViewModel
@Html.CheckBoxFor(x => x.Selected)
@Html.LabelFor(x => x.Selected, Model.Name)
@Html.HiddenFor(x => x.Name)
And that's all. Inside the Post action you will get the AllRoles
property populated with the values.