gpt4 book ai didi

c# - asp.net mvc Binder 不更新编辑 View 中的 RoleId 值

转载 作者:行者123 更新时间:2023-11-30 18:14:24 25 4
gpt4 key购买 nike

我有一个像这样的扩展用户类:

public class User : IdentityUser
{
public string Nombre { get; set; }
public string Apellidos { get; set; }
public int DepartamentoID { get; set; }
public Departamento Departamento { get; set; }
}

在我的编辑 View 中,我有这个字段定义:

<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>

当我发送表单时,角色集合是空的。

为什么 Binder 没有将角色添加到 Roles 集合中?

问候和感谢。

我尝试添加更多信息以回应 Rajesh 的评论。

在 Get 操作中,模型包含角色的信息,并且 View 正确显示了它。下拉列表显示可用的角色,并且用户的角色显示为已选中。当我在 View 中选择另一个不同的角色并发送表单时,在 Post 操作中,模型的 Roles 集合不再包含信息。

GET action

POST action

不知道如何调试Binder的工作

最佳答案

Why the Binder does not add the role to the Roles collection?

它发生是因为 @Html.DropDownListFor和默认模型 Binder 不够智能。你的@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模型绑定(bind)器将尝试将其绑定(bind)到 RoleId你的模型的属性,它对 Roles 一无所知属性(property),而且Roles prop 是可枚举的。

要使其正常工作,您的模型必须具有 RoleId属性(property),或者您可以使用 Html.ListBoxFor如果要选择多个角色,请扩展:

@Html.ListBoxFor(m => m.SelectedRoles, (SelectList)ViewBag.RoleList, new { @class = "form-control" })

那么你的模型必须有public List<string> SelectedRoles { get; set; }属性(property)。

另一种选择是使用 IModelBinder 创建自定义模型 Binder 界面。此选项为您提供了将请求数据映射到模型的无限能力。

关于c# - asp.net mvc Binder 不更新编辑 View 中的 RoleId 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50512380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com