我有一个扩展的User类,如下所示:
public class User : IdentityUser
{
public string Nombre { get; set; }
public string Apellidos { get; set; }
public int DepartamentoID { get; set; }
public Departamento Departamento { get; set; }
}
在我的“编辑”视图中,我具有以下字段定义:
<div class="form-group">
@Html.LabelFor(model => model.Roles.FirstOrDefault().RoleId, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(m => m.Roles.ElementAtOrDefault(0).RoleId, (SelectList)ViewBag.RoleList, "Seleccionar un rol", new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.Roles.FirstOrDefault().RoleId)
</div>
</div>
当我发送表单时,“角色”集合为空。
为什么活页夹未将角色添加到“角色”集合中?
问候和感谢。
我尝试添加更多信息以回应Rajesh的评论。
在“获取”操作中,模型包含角色的信息,并且视图正确显示了该信息。下拉列表显示可用角色,并且用户的角色显示为已选择。在视图中选择其他角色并发送表单后,在“发布”操作中,模型的“角色”集合不再包含信息。
GET action
POST action
我不知道如何调试活页夹的工作
最佳答案
为什么活页夹未将角色添加到“角色”集合中?
发生这种情况是因为@Html.DropDownListFor
和默认模型联编程序不够聪明。您的@Html.DropDownListFor
会生成如下内容:
<select class="form-control" id="RoleId" name="RoleId">
<option value="1">Role_1</option>
<option value="2">Role_2</option>
</select>
由于
name=RoleId
,模型绑定器将尝试将其绑定到模型的RoleId
属性,并且对Roles
属性一无所知,而且Roles
属性是可枚举的。要使其正常工作,您的模型必须具有
RoleId
属性,或者如果要选择多个角色,可以使用Html.ListBoxFor
扩展名:@Html.ListBoxFor(m => m.SelectedRoles, (SelectList)ViewBag.RoleList, new { @class = "form-control" })
然后,您的模型必须具有
public List<string> SelectedRoles { get; set; }
属性。另一个选择是使用
IModelBinder
界面创建自定义模型联编程序。此选项为您提供了将请求数据映射到模型的无限功能。关于c# - asp.net mvc Binder无法在“编辑” View 中更新RoleId值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50512380/