Добавить полный список ролей идентификации в отдельную модель - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь добавить полный список доступных ролей в модал редактирования пользователя. Я знаю, как только перечислить роли, которые имеет пользователь;Тем не менее, Я хочу предоставить полный список, чтобы вы могли установить / снять флажок в списке и обновить с помощью «isSelected». Я перепробовал много вариантов, найденных здесь и в Интернете;однако, большинство из них оставляют меня с несоответствием типов (не может преобразовать Type в EditUserViewModel.Role). Я пытался сделать это так же, как я извлек роли для конкретного пользователя, но он вытягивает "{Microsoft.EntityFrameworkCore.Internal.InternalDbSet`1 [Microsoft.AspNetCore.Identity.IdentityRole]}" в качестве ролии ломает его.

Метод:

   [HttpGet]
        public async Task<IActionResult> EditUser(string id)
        {
            //GET USER INFORMATION - EXIT IF USER DOESN'T EXIST
            var user = await userManager.FindByIdAsync(id);
            if (user == null)
                {
                ViewBag.ErrorMessage = $"User with Id = {id} cannot be found";
                return View("NotFound");
            }             

            //USER INFORMATION ---------------------------------------
            var model = new EditUserViewModel
            {
                Id = user.Id,
                Email = user.Email,
                UserName = user.UserName,
                FirstName = user.FirstName,
                LastName = user.LastName,
                Title = user.Title,
                Address = user.Address,
                City = user.City,
                State = user.State,
                //CompanyId = user.CompanyId

            };

            //   ViewBag.SelectedCommpany = user.CompanyId;

            //COMPANY DROPDOWN INFO------------------------------------
            var company = from c in companyRepository.GetCompanys() select c;
            foreach (var c in company)
            {
                ////Store this inforamtion into the company list in the viewmodel
                var companyinfo = new EditUserViewModel.CompanyList
                {
                    CompanyName = c.CompanyName,
                    CompanyID = c.CompanyId
                };
                model.CompanyLists.Add(companyinfo);
            };

            //GET LIST OF ROLES(RoleID, RoleName)
            var roles = roleManager.Roles;

            foreach (var RoleName in roles)
            {
                //Execute identity method to get full information for the Role and store into an object (roleinfo)
                var roleString = Convert.ToString(roles);
                var fullRoleInfo = await roleManager.FindByNameAsync(roleString);
                //Store this inforamtion into the Role list in the viewmodel
                var roleinfo = new EditUserViewModel.Role
                {
                    RoleName = fullRoleInfo.Name,
                    RoleID = fullRoleInfo.Id

                };

                model.Roles.Add(roleinfo);
            };
         }

Модель:

namespace PortalDev.Models.ViewModels
{
    public class EditUserViewModel
    {

        public EditUserViewModel()
        {
            Claims = new List<Claim>();
            Roles = new List<Role>();
            //CompanyLists = new List<ICompanyRepository>();
            CompanyLists = new List<CompanyList>();
        }

        //ROLES ---------------------------------------------
        public class Role
        {
            public string RoleName { get; set; }
            public string RoleID { get; set; }
            public bool IsSelected { get; set; }

        }
        public List<Role> Roles { get; set; }

        //CLAIMS----------------------------------------------
        public class Claim
        {
            public string ClaimType { get; set; }
            public string ClaimID { get; set; }
        }
        public List<Claim> Claims { get; set; }

        //COMPANY DROPDOWN--------------------------------------
        public class CompanyList
        {
            public string CompanyName { get; set; }
            public int CompanyID { get; set; }
        }
        [Display(Name = "Company")]
        public List<CompanyList> CompanyLists { get; set; }   //List of Companies for dropdown
        public string SelectedCompany { get; set; }

        //USER INFORMATION --------------------------------------
        public string Id { get; set; }
        //[Required]
        public string UserName { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Title { get; set; }
        [Required]
        [EmailAddress]
        public string Email { get; set; }
        public string Address { get; set; }
        public string City { get; set; }
        public string State { get; set; }



    }

}

1 Ответ

1 голос
/ 29 октября 2019

В цикле вы пытаетесь преобразовать весь набор ролей в имя одной роли, вместо этого используя вместо этого имя отдельной роли. Поэтому просто замените строку:

var roleString = Convert.ToString(roles);

на

var roleString = RoleName.Name;

Альтернативный подход с использованием Linq может выглядеть так:

var allRoleViewModels = roleManager.Roles.Select(x => new EditUserViewModel.Role {RoleID = x.Id, RoleName = x.Name}).ToList();
...