首页 > 解决方案 > 将搜索功能添加到视图模型的正确方法是什么?

问题描述

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

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

这产生的错误是:

无法将类型“ System.Collections.Generic.IEnumerable<ims.Models.ApplicationUser>”隐式转换为“ims.Models.AdminViewModels.UsersAndRolesViewModel”。存在显式转换(您是否缺少演员表?)

此错误产生于

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

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

解决方案


如果您尝试将用户列表返回到视图,请尝试此操作

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 => s.FullName.Contains(searchString))

返回用户列表。但是您将其分配给模型。


推荐阅读