Я хочу показать всех пользователей с указанным именем роли. Я просто указываю имя роли в представлении. Если это имя существует, покажите всех связанных пользователей (сейчас это работает) или ничего не отобразите (здесь возникли исключения). Вот мой код в контроллере:
public ActionResult ViewUser(string roleName)
{
var UsersContext = new ApplicationDbContext();
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));
if (roleManager.RoleExists(roleName))
{
var role = roleManager.FindByName(roleName).Users.First();
var usersInRole = UsersContext.Users.Where(u => u.Roles.Select(r => r.RoleId).Contains(role.RoleId)).ToList();
return View(usersInRole);
}
else
{
return View();
}
}
Вот код с несуществующим именем роли "Рабочий" в представлении:
@Html.ActionLink("Manage User", "ViewUser", "Home", new { @roleName = "Worker"}, new { style = "color:white" })
Следующий снимок экрана является результатом, когда я указываю «Клиент», который существует в базе данных, в качестве имени роли. Если я укажу другое несуществующее имя, в результате не должно быть списка пользователей.

Какой тип данных у usersInRole?
var role = roleManager.FindByName(roleName).Users.First(); выдаст исключение, если не будет найдена роль с указанным именем. Вместо этого рассмотрите возможность использования FirstOrDefault() в этом запросе, поскольку он вернет значение по умолчанию (null в вашем случае), если ничего не будет найдено.





Надеюсь, я привожу здесь обряд ... Вы хотите вернуть пустой список, чего вы можете достичь с помощью ниже:
private List<myClass> GetList(){
List<myClass> list = new List<myClass>();
list.Add(new myClass()); // Add your Class
return list; // retunrs a empty List
}
public ActionResult ViewUser(string roleName)
{
var UsersContext = new ApplicationDbContext();
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));
if (roleManager.RoleExists(roleName))
{
var role = roleManager.FindByName(roleName).Users.First();
var usersInRole = UsersContext.Users.Where(u => u.Roles.Select(r => r.RoleId).Contains(role.RoleId)).ToList();
return View(usersInRole);
}
else
{
return View(new List<Users>());
}
}
Предполагается, что вы возвращаете экземпляр объекта User из коллекции usersInRole внутри блока if, вы можете реструктурировать блок if, чтобы автоматически возвращать пустую коллекцию List<User>, если не выполняются никакие условия (также добавлена проверка null для метода FindByName()):
public ActionResult ViewUser(string roleName)
{
var UsersContext = new ApplicationDbContext();
var usersInRole = new List<User>(); // assign instance before if conditions
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));
if (roleManager.RoleExists(roleName))
{
// change to FirstOrDefault is more recommended
var role = roleManager.FindByName(roleName).Users.FirstOrDefault();
if (role != null)
{
usersInRole = UsersContext.Users.Where(u => u.Roles.Select(r => r.RoleId).Contains(role.RoleId)).ToList();
}
}
return View(usersInRole);
}
Или просто вернуть пустой список в блоке else:
var emptyList = new List<User>();
return View(emptyList);
Кроме того, убедитесь, что вы используете @model User для привязки его к странице просмотра.
Большое тебе спасибо. Но что здесь за Пользователь? У меня нет класса под названием User
User - это пример имени класса, связанного с сущностью Users, фактическое имя класса зависит от того, что возвращает запрос UsersContext.Users.