SelectListItem 中的 OptGroup 未显示在 DropDownList 中

问题描述

我用SelectListItem写了一个在DropDownlist中显示Items和Groups的方法,但问题是只显示一个组名和子组以及其他组的子组。问题是不要显示第二、第三、.. 组(但显示他们的孩子)。 我的模型是

public class Permissionsviewmodel
    {
        public long ID { get; set; }
        public string Title { get; set; }
        public long TypeId { get; set; }
        public long? ParentId { get; set; }
        public string ParentTitle { get; set; }
        public List<Permissionsviewmodel> ParentList { get; set; }
        public List<Permissionsviewmodel> OperationsList { get; set; }
        public List<PermissionTypesDto> PermissionTypesList { get; set; }
        public bool Status { get; set; }
    }

获取数据的方法

public Dictionary<long?,List<Permissionsviewmodel>> GetPermissionsByModule()
        {
            var ItemValue = (_ipermissionTypes.Expose().FirstOrDefault(x => x.Title == "Operation").Id);

            var permissionbymodule = _ntumcontext.Tbl_Permissions
                .Where(x => x.Status == true && x.TypeId == ItemValue)
                .Select(x => new Permissionsviewmodel
                {
                    ID = x.ID,Title = x.Title,Status = x.Status,ParentId = x.ParentId,ParentTitle=x.permission.Title,TypeId=x.TypeId,}).AsEnumerable().GroupBy(x => x.ParentId).ToList();

            return permissionbymodule.ToDictionary(k => k.Key,v => v.ToList());
        }

以及进入剃刀页面方法(查看):

public List<SelectListItem> Permissions = new List<SelectListItem>();
public List<SelectListItem> GetPermissionsByModule()
            {
                var AllPermissions = _ipermissionsApplication.GetPermissionsByModule();
                foreach (var (key,value) in AllPermissions)
                {
    
                    var parentTitle = _ipermissionsApplication.GetDetails(key).Title; //get group title from key
                    var group = new SelectListGroup() { Name = parentTitle };
                    foreach (var per in value)
                    {
                        var item = new SelectListItem(per.Title,per.ID.ToString())
                        {
                            Group = group
                        };
                        Permissions.Add(item);
                    }
    
                }
                return Permissions;
            }

在 cshtml 中:

<select asp-for="RoleVM.SelectedPermissions" asp-items="Model.Permissions">

目前用上面的代码,问题是不显示第二个和第三个和...,只显示一个组名,而是显示所有组的所有子项。

解决方法

首先,您需要检查 AllPermissions 的值,可能 parentID 不存在,然后您需要检查 var parentTitle = _ipermissionsApplication.GetDetails(key).Title; 可能第二个和第三个和.. parentTitle 为空。

这是一个工作演示(我使用假数据):

public class TestPermissionsModel : PageModel
    {
        public List<SelectListItem> Permissions = new List<SelectListItem>();
        
        public void GetPermissionsByModule()
        {
            var AllPermissions = new Dictionary<long,List<PermissionsViewModel>>()
            {
                {1,new List<PermissionsViewModel>{ new PermissionsViewModel{ ID=11,Title="title11",ParentId=1},new PermissionsViewModel { ID = 12,Title = "title12",ParentId = 1 } } },{2,new List<PermissionsViewModel>{ new PermissionsViewModel{ ID=21,Title="title21",ParentId=2},new PermissionsViewModel { ID = 22,Title = "title22",ParentId = 2 } } },{3,new List<PermissionsViewModel>{ new PermissionsViewModel{ ID=31,Title="title31",ParentId=3},new PermissionsViewModel { ID = 32,Title = "title32",ParentId = 3 } } }


            };
            foreach (var (key,value) in AllPermissions)
            {

                var parentTitle = "parentTitle" + key; //get group title from key
                var group = new SelectListGroup() { Name = parentTitle };
                foreach (var per in value)
                {
                    var item = new SelectListItem(per.Title,per.ID.ToString())
                    {
                        Group = group
                    };
                    Permissions.Add(item);
                }

            }
        }
        public void OnGet()
        {
            GetPermissionsByModule();

        }
    }

查看:

<select  asp-items="Model.Permissions"></select>

结果:

enter image description here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...