Как вернуть пустой список в View в ASP.NET - PullRequest
0 голосов
/ 18 сентября 2018

Я хочу показать всех пользователей с указанным именем роли. То, что я делаю, это просто укажите имя роли в представлении. Если это имя существует, покажите всех связанных пользователей (это работает сейчас) или ничего не отобразите (исключения возникли здесь). Вот мой код в контроллере:

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" })

Следующий снимок экрана является результатом, когда в качестве имени роли указывается «Клиент», который существует в базе данных. Если я укажу другое несуществующее имя, результат не должен содержать список пользователей. enter image description here

Ответы [ 3 ]

0 голосов
/ 18 сентября 2018
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>());
        }

    }
0 голосов
/ 18 сентября 2018

Предполагая, что вы возвращаете 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привязать его на странице просмотра.

0 голосов
/ 18 сентября 2018

Я надеюсь, что я получу ваш обряд здесь ... Вы хотите вернуть пустой список, который вы можете получить с помощью ниже:

private List<myClass> GetList(){
        List<myClass> list = new List<myClass>();
        list.Add(new myClass());   // Add your Class
        return list;               // retunrs a empty List
}
...