让用户在Razor页面中扮演特定角色

时间:2020-04-10 16:53:13

标签: .net visual-studio asp.net-core asp.net-identity

我正在开发一个网站,供两个角色的用户使用:管理员和教授,现在教授可以教授课程,我已经建立了表之间的关系,并且现在可以正常工作添加课程时,我需要有一个下拉列表的用户列表(具有Professor角色),以便我可以为所添加的课程分配教授,因此,如何为具有Professor角色的用户填充下拉列表? 这是我现在的代码:

 public class CreateModel : PageModel
    {
        private readonly DotNetProject.Data.ApplicationDbContext _context;
        private readonly UserManager<IdentityUser> _userManager;

        public CreateModel(DotNetProject.Data.ApplicationDbContext context, UserManager<IdentityUser> userManager)
        {
            _context = context;
            _userManager = userManager;
        }

        public IActionResult OnGet()
        {
        ViewData["BranchIdBranch"] = new SelectList(_context.Branch, "IdBranch", "IdBranch");
        ViewData["UserId"] = new SelectList(_context.AppUser, "Id", "Id");
            return Page();
        }

        [BindProperty]
        public Course Course { get; set; }


        public async Task<IActionResult> OnPostAsync()
        {
            if (!ModelState.IsValid)
            {
                return Page();
            }

            _context.Course.Add(Course);
            await _context.SaveChangesAsync();

            return RedirectToPage("./Index");
        }
    }

2 个答案:

答案 0 :(得分:0)

您可以在这里找到类似的问题: Get list of users with assigned roles in asp.net identity 2.0

您可以使用ViewBag将值传递到剃须刀页面:

ViewBag.CustomerId = new SelectList(db.Users.Where(x=> x.Roles.Where(p=>roles.Contains(p.RoleId))).Select(user=> new SelectListItem{Text=user.UserName,Value=user.UserID.ToString()}));

答案 1 :(得分:0)

您可以使用以下代码:

  public void OnGet()
        {
            ViewData["ProfessorData"] =  _context.Users.Where(x => x.Roles.Select(p => p.Id).Contains(roleId)).Select(n => new SelectListItem
            {
               Value = n.Id.ToString(),
               Text = n.UserName.ToString()
            }).ToList(); 
        }

查看:

   <select asp-items="@((List<SelectListItem>)ViewData["ProfessorData"])">
        <option value="">---Choose One---</option>
    </select>