[英]asp.net mvc Binder not update the RoleId value in Edit view
我有一个扩展的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>
当我发送表单时,Roles集合是空的。
为什么Binder不会将角色添加到Roles集合中?
问候和感谢。
我尝试添加更多信息以回应Rajesh的评论。
在Get操作中,模型包含角色的信息,视图正确显示。 下拉列表显示可用角色,并且选择了用户角色。 在视图中我选择另一个不同的角色并发送表单时,在Post操作中,模型的Roles集合不再包含信息。
我不知道如何调试Binder的工作
为什么Binder不会将角色添加到Roles集合中?
这是因为@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
prop是可枚举的。
要使其工作,您的模型必须具有RoleId
属性,或者如果要选择多个角色,则可以使用Html.ListBoxFor
扩展:
@Html.ListBoxFor(m => m.SelectedRoles, (SelectList)ViewBag.RoleList, new { @class = "form-control" })
那么你的模型必须有public List<string> SelectedRoles { get; set; }
public List<string> SelectedRoles { get; set; }
public List<string> SelectedRoles { get; set; }
属性。
另一种选择是使用IModelBinder
接口创建自定义模型绑定器。 此选项为您提供了将请求数据映射到模型的无限功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.