将搜索功能添加到视图模型的正确方法是什么?

时间:2018-05-16 11:52:11

标签: c# asp.net-core-mvc asp.net-core-mvc-2.0

我正在尝试向我可以按名称搜索用户的方法添加搜索功能。到目前为止,我已经尝试了这个但是我收到了一个我不完全理解的错误:

public async Task<IActionResult> ListUsers(string searchString)
{
    var AllUsers = _application.Users.ToList();
    UsersAndRolesViewModel UserAndRoleViewModel = new UsersAndRolesViewModel();
    List<UserAndRoleViewModel> AllUsersAndRoles = new List<UserAndRoleViewModel>();

    foreach (var usr in AllUsers)
    {
        var model = new UserAndRoleViewModel
        {
            Id = usr.Id,
            Email = usr.Email,
            Roles = await _usermanager.GetRolesAsync(usr),
            PhoneNumber = usr.PhoneNumber,

        };

        AllUsersAndRoles.Add(model);
    }

    UserAndRoleViewModel.UserAndRole = AllUsersAndRoles;

    if (!String.IsNullOrEmpty(searchString))
    {
     UserAndRoleViewModel = AllUsers.Where(s => s.FullName.Contains(searchString));
    }


    return View(UserAndRoleViewModel);
}

这产生的错误是:

  

无法隐式转换类型&#39; System.Collections.Generic.IEnumerable<ims.Models.ApplicationUser>&#39; to&#39; ims.Models.AdminViewModels.UsersAndRolesViewModel&#39;。存在显式转换(您是否错过了演员?)

此错误在

上生成
UserAndRoleViewModel = AllUsers.Where(s => s.FullName.Contains(searchString));

2 个答案:

答案 0 :(得分:0)

这只是由基本类型不匹配引起的:UserAndRoleViewModel属于UsersAndRolesViewModel类型。 AllUsers.Where(...)的类型为IEnumerable<>。我怀疑您要将结果分配给UserAndRoleViewModel

属性

答案 1 :(得分:0)

如果您尝试将用户列表返回到View,请尝试使用

if (!String.IsNullOrEmpty(searchString))
{
 List<UserAndRoleViewModel > UserRoles = AllUsers.Where(s => s.FullName.Contains(searchString)).ToList();
} 

或者,如果您想要返回具有特定名称的单个用户,请尝试以下

if (!String.IsNullOrEmpty(searchString))
{
 var UserRoles = AllUsers.SingleOrDefault(s => s.FullName == searchString);
}
  

AllUsers.Where(s =&gt; s.FullName.Contains(searchString))

返回用户列表。但是你把它分配给了一个模型。

相关问题