如何在ASP.NET中的视图中返回空列表

时间:2018-09-18 07:17:51

标签: c# asp.net controller actionresult

我想显示具有指定角色名称的所有用户。我正在做的只是在视图中指定一个角色名称。如果存在该名称,则显示所有相关用户(此功能现在可以使用),或不显示任何内容(此处出现异常)。 这是我在控制器中的代码:

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();
        }

    }

以下是在View中不存在名为“ Worker”的角色名称的代码:

@Html.ActionLink("Manage User", "ViewUser", "Home", new { @roleName="Worker"}, new { style = "color:white" })

以下屏幕快照是当我指定数据库中存在的“客户”作为角色名称时的结果。如果我指定另一个不存在的名称,则结果应该不包含用户列表。 enter image description here

3 个答案:

答案 0 :(得分:1)

假设您要从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将其绑定到视图页面中。

答案 1 :(得分:0)

我希望我能在这里让你参加仪式。 您想返回一个空列表,可以通过以下方法实现:

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

答案 2 :(得分:0)

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>());
        }

    }