Передайте объект PrincipalSearchResult в список в ViewModel - PullRequest
1 голос
/ 25 июня 2019

Моя цель состоит в том, чтобы пользователь AD выполнял поиск существующих пользователей на основе определенных критериев (имя, фамилия, идентификатор) и отображал соответствующие элементы.

Я использую PrincipalSearcher для этого:

Контроллер:

public ViewResult Index(string fname, string lname, int id)
    {
        UserPrincipal user = new UserPrincipal(pcontext);

        user.GivenName = fname;
        user.Surname = lname;
        user.EmployeeId = id.ToString();

        PrincipalSearcher ps = new PrincipalSearcher();
        ps.QueryFilter = user;
        PrincipalSearchResult<Principal> results = ps.FindAll();

        List<Principal> userResults = new List<Principal>();
        foreach (Principal item in results)
        {
            userResults.Add(item);
        }

        var viewModel = new UserSearchViewModel
        {
            Users = userResults.ToList()
        };

        return View(viewModel);
    }

В конце я передаю результаты созданной мною модели представления, привязывая ее к модели списка.

ViewModel:

    public class UserSearchViewModel
{
    public Request Request { get; set; }

    public List<UserSearch> Users { get; set; }

    public int id { get; set; }

    public string fname { get; set; }

    public string lname { get; set; }
}

Текущее сообщение об ошибке, которое я получаю, следующее: Не удается неявно преобразовать тип 'System.Collections.Generic.List' в 'System.Collections.Generic.List'

Я попытался изменить userResults на тип List, но ошибка остается. Я попытался просто вернуть результаты, но потом не могу понять, как отправить результаты пользователя, а затем отобразить результаты в представлении.

Буду признателен за любую помощь или направление в достижении моей цели.

РЕДАКТИРОВАТЬ: Модель

    public class UserSearch
{
    public int employeeId { get; set; }

    public string firstname { get; set; }

    public string lastname { get; set; }
}

1 Ответ

0 голосов
/ 25 июня 2019

Вам необходимо спроецировать userresult на вашу UserSearch модель:

    var viewModel = new UserSearchViewModel
    {
        Users = ps.FindAll().Cast<UserPrincipal>() // You could use also .OfType<UserPrincipal> 
                            .Select(p=>new UserSearch{employeeid=p.EmployeeId,
                                                      firstname=p.GivenName, 
                                                      lastname=p.SurName})
                            .ToList()
    };

С небольшой помощью этой записи .Principal не имеет имени и фамилии, поэтому я делаю кастинг

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...