Вы должны дать своим флажкам имена:
@if (role.Name == "User")
{
<td><input type="checkbox" checked="checked" name="roles"/></td>
}
else
{
<td><input type="checkbox" name="roles"/></td>
}
и затем:
[HttpPost]
public ActionResult Index(IEnumerable<string> roles)
{
...
}
Кроме того, вы должны использовать модели представлений, строго типизированные представления и помощники, а не чекбоксы с жестким кодом, как вы делали в своих обзорах.
Вот что я имею в виду:
Модель:
public class MyViewModel
{
public RoleViewModel[] Roles { get; set; }
}
public class RoleViewModel
{
public string RoleName { get; set; }
public bool IsSelected { get; set; }
}
, а затем:
public class HomeController: Controller
{
public ActionResult Index()
{
var roles = securityServiceClient.GetAllRoles().Select(r => new RoleViewModel
{
RoleName = r.Name
});
var model = new MyViewModel
{
Roles = roles
};
return View(model);
}
[HttpPost]
public ActionResult Index(IEnumerable<RolesViewModel> roles)
{
...
}
}
и в представлении:
@model MyViewModel
@using (Html.BeginForm())
{
<table>
<thead>
<tr>
<th>role</th>
</tr>
</thead>
<tbody>
@for (var i = 0; i < Model.Roles.Length; i++)
{
<tr>
<td>
@Html.CheckBoxFor(x => x.Roles[i].IsSelected)
@Html.LabelFor(x => x.Roles[i].IsSelected, Model.Roles[i].RoleName)
@Html.HiddenFor(x => x.Roles[i].RoleName)
</td>
</tr>
}
</tbody>
</table>
}