问题描述
我用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>
结果: