【发布时间】:2020-07-28 09:48:04
【问题描述】:
我正在开发一个 ASP.NET Core 2.2 MVC 应用程序并尝试实现Bootstrap Dual Listbox plugin 以进行角色选择。我有_UserEditorPartial.cshtml 视图,可用于为用户分配角色(右侧的列表框将包含分配的角色):
(部分有更多可编辑的字段,但我认为这些无关紧要)
现在,部分包含与我在父页面上选择的用户相关的数据。当我选择用户时,我只需将 UserID 传递给 ViewUserEditorPartial 并查询数据库以检索可用角色的整个列表,如果用户属于该角色,则将 IsAssigned 属性标记为 true。所以现在,我有一个角色列表,我知道哪个角色属于用户。
我正在努力解决如何确保属于用户的角色最终出现在右侧的列表框中。如果用户属于Role2 和Role4,我希望我的视图生成如下:
我找到了this solution,但对我来说这两个列表框是如何正确填充的并不明显。我在想在加载部分后我可能会用 JavaScript 做一些事情,我用 AJAX 分别检索 List<RoleUserAssignment> 并根据每个角色的 IsAssigned 属性的值,生成正确的 <option> 标记列表框。但我想知道有没有更好的方法?
另外,我将使用我找到的this solution 实现创建用户和分配角色的功能。
型号:
public class Role
{
public int RoleID { get; set; }
public string RoleName { get; set; }
}
public class User
{
public int UserID { get; set; }
public string UserName { get; set; }
}
public class RoleUserAssignment
{
public RoleUserAssignment()
{
Role = new Role();
User = new User();
}
public Role Role { get; set; }
public User User { get; set; }
public bool IsAssigned { get; set; } //true if user has role
}
public class UserEditing
{
public UserEditing()
{
RoleUserAssignments = new List<RoleUserAssignment>();
}
public List<RoleUserAssignment> RoleUserAssignments { get; set; }
}
HTML
@model UserEditing
<script>
$(document).ready(function () {
$('#rolesSelection').bootstrapDualListbox({});
});
</script>
<form id="userEditorForm">
<div>Roles</div>
<select id="rolesSelection" class="form-control" class="form-control" asp-for="@Model.RoleUserAssignments" asp-items="@(new SelectList(Model.RoleUserAssignments, "Role.RoleID", "Role.RoleName"))"
multiple="multiple">
</select>
</form>
ViewUserEditorPartial 操作:
[HttpGet]
public IActionResult ViewUserEditorPartial(int UserID)
{
UserEditing userEditing = new UserEditing();
userEditing.RoleUserAssignments = _userAdmin.GetRoleUserAssignmentsByUserID(_appSettings.MOPConfigConnectionString, UserID);
return PartialView("_UserEditorPartial", userEditing);
}
【问题讨论】:
标签: javascript html asp.net-mvc asp.net-core bootstrap-duallistbox