2015-08-11 3 views
0

Я использую PagedList.Mvc NuGet Пакет для пейджинга, в свете все кажется отлично работает хорошо, но в моем контроллере эта ошибка возникаетСписок не содержит определение для «ToPagedList»

'System.Collections.Generic.List<CreateSocial.Models.UserProfiles>' does not contain a definition for 'ToPagedList' and no extension method 'ToPagedList' accepting a first argument of type 'System.Collections.Generic.List<CreateSocial.Models.UserProfiles>' could be found (are you missing a using directive or an assembly reference?) 

даже хотя я определил как пространство имен:

using PagedList; 
using PagedList.Mvc; 

мой код выглядит следующим образом:

[HttpGet] 
public ActionResult Results(SearchViewModel svm, int CurrentPage) 
{ 
    const int ResultsPerPage = 50; 
    List<UserProfiles> results = db.UserProfiles.Where(w => w.FirstName.Contains(svm.SearchStr) || w.LastName.Contains(svm.SearchStr)).ToList(); 

    return View(results.ToPagedList(CurrentPage, ResultsPerPage)); 
} 

I попытался удалить и снова добавить PagedList через консоль диспетчера пакетов. Но я не могу это исправить. Что может быть причиной этого и как его исправить? Надеюсь, вы, ребята, можете дать какие-то предложения. Заранее спасибо!

ответ

2

Прежде всего не используйте ToList()! Если у вас есть как 10000 записей в базе данных, он сначала загрузить их в память, а затем выполнить метод ToPagedList

Если вы смотрите в определении расширений pagedlist, то вы увидите, что вы можете также использовать IQueryable

// Summary: 
    //  Creates a subset of this collection of objects that can be individually accessed 
    //  by index and containing metadata about the collection of objects the subset 
    //  was created from. 
    // 
    // Parameters: 
    // superset: 
    //  The collection of objects to be divided into subsets. If the collection implements 
    //  System.Linq.IQueryable<T>, it will be treated as such. 
    // 
    // pageNumber: 
    //  The one-based index of the subset of objects to be contained by this instance. 
    // 
    // pageSize: 
    //  The maximum size of any individual subset. 
    // 
    // Type parameters: 
    // T: 
    //  The type of object the collection should contain. 
    // 
    // Returns: 
    //  A subset of this collection of objects that can be individually accessed 
    //  by index and containing metadata about the collection of objects the subset 
    //  was created from. 
public static IPagedList<T> ToPagedList<T>(this IQueryable<T> superset, int pageNumber, int pageSize); 

О ваша проблема, проверьте, имеете ли вы ссылку pagedlist и pagedlist.mvc. Также попробуйте перестроить проект и проверьте, не отображаются ли какие-либо другие ошибки.

+1

Очень важный момент здесь. Если вы используете 'ToList()', вы побеждаете всю точку пейджинга. Помимо использования 'IQueryable', вы также можете создать экземпляр' PagedList' через 'StaticPagedList', который позволит вам передать подмножество, полученное через' Skip' и 'Take' (которое вы * можете * вызывать' ToList() 'on) и общее количество. В любом случае, вы только запрашиваете записи, которые вам действительно нужны для текущей страницы. –

3

Возможно, вам не хватает пространства имен «using xxxxxx».

использование PagedList;

Обычно это «методы расширения» ...... и хотя они расширяют то, что у вас, вероятно, уже есть инструкция «using» для ... самого метода расширения, вероятно, находится в другом пространстве имен (для этого требуется дополнительный «использование»).

APPEND

Вы упоминаете «Я попытался удалить и снова добавлять PagedList с помощью диспетчера пакетов консоли»

Когда вы сделаете это, есть выпадающее поле для целевого проекта. Убедитесь, что у вас есть правильный csproj, указанный в раскрывающемся списке.

Чтобы убедиться, что у вас есть ссылка, откройте свой файл proj (csproj) в блокноте или блокноте ++ и найдите ссылку.

+0

Я приложил свой ответ. – granadaCoder