繁体   English   中英

asp.net mvc Binder不会在“编辑”视图中更新RoleId值

[英]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集合不再包含信息。

GET行动

POST动作

我不知道如何调试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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM