DependencyResolver.Current.GetService

Я пытаюсь реализовать сетку, используя MVCGrid.net

В MVCGridConfig.cs у них есть что-то вроде этого

 .WithRetrieveDataMethod((context) =>
         {
             var options = context.QueryOptions;
             int totalRecords;
             var repo = DependencyResolver.Current.GetService<IPersonRepository>();
             ...
          }

Я не совсем понимаю этот IPersonRepository. Пожалуйста, дайте мне знать, что этот интерфейс должен делать?

Первоначально я использовал WebGrid, где я передавал список клиентов в представление и в представлении имел IEnumerable для просмотра сетки. Если бы у пользователя был поисковый термин, я бы передал этот поисковый запрос контроллеру, который, соответственно, вернул бы список клиентов, соответствующих данному поисковому запросу.

Я не могу рассказать, как реализовать логику WebGrid в этом WithRetrieveDataMethod. В частности, что я должен делать с этим интерфейсом.

Кроме того, если из представления передается поисковый термин, как я могу изменить WithRetrieveDataMethod.

1 ответ

Этот IPersonRepository используется для глобального поиска, сортировки и фильтрации столбцов в сетке. Вам необходимо изменить 'filterFirstName', 'filterLastName' и т. Д. На соответствующие элементы, которые вы используете в своем проекте, и вы также можете вносить другие изменения. В разделе Case также вам нужны только те свойства, которые вы используете в своем проекте.

public interface IPersonRepository
{
    IEnumerable<Person> GetData(out int totalRecords, string globalSearch, int? limitOffset, int? limitRowCount, string orderBy, bool desc);
    IEnumerable<Person> GetData(out int totalRecords, int? limitOffset, int? limitRowCount, string orderBy, bool desc);
    IEnumerable<Person> GetData(out int totalRecords, string filterFirstName, string filterLastName, bool? filterActive, int? limitOffset, int? limitRowCount, string orderBy, bool desc);
}
public class PersonRepository : IPersonRepository
{
    public IEnumerable<Person> GetData(out int totalRecords, string filterFirstName, string filterLastName, bool? filterActive, int? limitOffset, int? limitRowCount, string orderBy, bool desc)
    {
        return GetData(out totalRecords, null, filterFirstName, filterLastName, filterActive, limitOffset, limitRowCount, orderBy, desc);
    }

    public IEnumerable<Person> GetData(out int totalRecords, string globalSearch, int? limitOffset, int? limitRowCount, string orderBy, bool desc)
    {
        return GetData(out totalRecords, globalSearch, null, null, null, limitOffset, limitRowCount, orderBy, desc);
    }

    public IEnumerable<Person> GetData(out int totalRecords, string globalSearch, string filterFirstName, string filterLastName, bool? filterActive, int? limitOffset, int? limitRowCount, string orderBy, bool desc)
    {
        using (var db = new SampleDatabaseEntities())
        {
            var query = db.People.AsQueryable();

            if (!String.IsNullOrWhiteSpace(filterFirstName))
            {
                query = query.Where(p => p.FirstName.Contains(filterFirstName));
            }
            if (!String.IsNullOrWhiteSpace(filterLastName))
            {
                query = query.Where(p => p.LastName.Contains(filterLastName));
            }
            if (filterActive.HasValue)
            {
                query = query.Where(p => p.Active == filterActive.Value);
            }

            if (!String.IsNullOrWhiteSpace(globalSearch))
            {
                query = query.Where(p => (p.FirstName + " " + p.LastName).Contains(globalSearch));
            }

            totalRecords = query.Count();

            if (!String.IsNullOrWhiteSpace(orderBy))
            {
                switch (orderBy.ToLower())
                {
                    case "firstname":
                        if (!desc)
                            query = query.OrderBy(p => p.FirstName);
                        else
                            query = query.OrderByDescending(p => p.FirstName);
                        break;
                    case "lastname":
                        if (!desc)
                            query = query.OrderBy(p => p.LastName);
                        else
                            query = query.OrderByDescending(p => p.LastName);
                        break;
                    case "active":
                        if (!desc)
                            query = query.OrderBy(p => p.Active);
                        else
                            query = query.OrderByDescending(p => p.Active);
                        break;
                    case "email":
                        if (!desc)
                            query = query.OrderBy(p => p.Email);
                        else
                            query = query.OrderByDescending(p => p.Email);
                        break;
                    case "gender":
                        if (!desc)
                            query = query.OrderBy(p => p.Gender);
                        else
                            query = query.OrderByDescending(p => p.Gender);
                        break;
                    case "id":
                        if (!desc)
                            query = query.OrderBy(p => p.Id);
                        else
                            query = query.OrderByDescending(p => p.Id);
                        break;
                    case "startdate":
                        if (!desc)
                            query = query.OrderBy(p => p.StartDate);
                        else
                            query = query.OrderByDescending(p => p.StartDate);
                        break;
                }
            }


            if (limitOffset.HasValue)
            {
                query = query.Skip(limitOffset.Value).Take(limitRowCount.Value);
            }

            return query.ToList();
        }
    }

    public IEnumerable<Person> GetData(out int totalRecords, int? limitOffset, int? limitRowCount, string orderBy, bool desc)
    {
        return GetData(out totalRecords, null, null, null, limitOffset, limitRowCount, orderBy, desc);
    }
}
Другие вопросы по тегам