gpt4 book ai didi

asp.net-mvc - 客户端的 ASP.NET MVC 多对多模型

转载 作者:行者123 更新时间:2023-12-04 20:07:01 25 4
gpt4 key购买 nike

我有 3 个多对多表:Users -< UserRoles >- Roles .我这样设置我的模型:

public class User
{
public int UserId {get; set;};
public IEnumerable<Role> Roles {get; set;};
}

public class Role
{
public int RoleId {get; set;};
public string RoleName {get; set};
}

public class UserDisplayModel
{
public User User{get; set;};
public IEnumerable<Role> AllRoles {get; set;}
}

编辑/创建用户时,如何在 Controller 中获取选中的角色复选框以及如何在 View 中进行设置?

如果我在设置模型的方式上一开始就错了,请告诉我并协助我如何去做。

谢谢。

最佳答案

关键是您需要在 View 中正确呈现您的集合。首先,向角色 View 数据对象添加一个 bool 属性,这样我们就可以将复选框绑定(bind)到:

public class Role
{
public bool IsInRole { get; set; }
[HiddenInput(DisplayValue = false)]
public int RoleId { get; set; }
[HiddenInput(DisplayValue = true)]
public string RoleName { get; set; }
}

请注意,我在属性上放置了一些 HiddenInput 属性(稍后会详细介绍)。您也可以将如上所示的 User 对象传递给 View - 这已经具有角色的子集合。有几种方法可以在 View 中呈现此集合,但最简单的方法之一是:
<%: Html.EditorFor(m => m.Roles) %>

现在为 Role 对象添加一个编辑器模板,以便上面的行执行我们想要的操作。将 Role.ascx 添加到/Views/Shared/EditorTemplates 文件夹。 Roles.ascx 看起来像这样:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MvcApplication5.Controllers.Role>" %>
<%: Html.EditorFor(m => m.IsInRole) %>
<%: Html.EditorFor(m => m.RoleId) %>
<%: Html.EditorFor(m => m.RoleName) %>

当您执行查看源代码时,您会看到您的 html 看起来像这样:
<input class="check-box" id="Roles_0__IsInRole" name="Roles[0].IsInRole" type="checkbox" value="true" /><input name="Roles[0].IsInRole" type="hidden" value="false" />
<input id="Roles_0__RoleId" name="Roles[0].RoleId" type="hidden" value="1" />
RoleName1<input id="Roles_0__RoleName" name="Roles[0].RoleName" type="hidden" value="RoleName1" />
<input class="check-box" id="Roles_1__IsInRole" name="Roles[1].IsInRole" type="checkbox" value="true" /><input name="Roles[1].IsInRole" type="hidden" value="false" />
<input id="Roles_1__RoleId" name="Roles[1].RoleId" type="hidden" value="2" />
RoleName2<input id="Roles_1__RoleName" name="Roles[1].RoleName" type="hidden" value="RoleName2" />

这是回发表单时模型绑定(bind)的关键。我们使用 DisplayValue=true 作为显示名称,因为我们需要隐藏输入用于回发模型绑定(bind),但它需要是只读的。对于 roleId,这是一个隐藏的输入,不会向用户显示任何值。见 this post有关 HiddenInput 的更多信息。

当您发回此内容时,MVC 内置模型绑定(bind)器将确保您的角色集合是构造属性,并且您将看到复选框状态正确反射(reflect)在您的模型中。

关于asp.net-mvc - 客户端的 ASP.NET MVC 多对多模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3938023/

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