我有以下型号 -
public class RoleModel
{
public int Id { get; set; }
public string RoleName { get; set; }
public virtual IEnumerable<UserModel> Users { get; set; }
public virtual IEnumerable<UserModel> SelectedUsers { get; set; }
public RoleModel()
{
}
}
用户IEnumerable是当前分配给所选角色的用户列表。加载视图时,会正确填充。
当我在视图中按Save时,SelectedUsers IEnumerable和Users IEnumerable为null,这意味着我无法取消分配所有用户并将所选用户重新分配给该角色。
按Save时IEnumerables为空的任何想法?
查看
@Html.ListBoxFor(model => model.SelectedUsers, new SelectList(Model.Users, "Id", "SurnameFirstName"))
控制器
[Authorize]
[HttpGet]
public ActionResult Details(int id = 0)
{
RoleModel role = _roleService.GetById(id);
if (role == null)
{
return HttpNotFound();
}
return View(role);
}
[HttpPost]
public ActionResult Details(RoleModel model)
{
if (ModelState.IsValid)
{
_roleService.ReassignRights(model);
_roleService.ReassignUsers(model);
_roleService.Update(model);
return RedirectToAction("Index");
}
return View(model);
}
在RoleService.cs中重新分配用户方法
public void ReassignUsers(RoleModel role)
{
var roleDal = _roleRepository.FindById(role.Id);
//_roleRepository.ClearUsersForRole(role.Id);
foreach (var user in role.SelectedUsers)
{
}
}
答案 0 :(得分:1)
尝试将UserModel
的类型替换为UserModel PK的类型。如果UserModel::Id
为int
,则更改SelectedUsers
,如下所示。
public virtual IEnumerable<int> SelectedUsers { get; set; }
虽然Users
属性仍然为null,因为没有与Users
相关的输入,但它只是用于在ListBoxFor
中呈现html选项。您需要在提交时再次设置该值。