2014-10-01 3 views
2

У меня есть форма поиска с кнопкой поиска. Когда пользователь вводит все поля ввода поиска и нажатие кнопки поиска вернет только 10 записей в таблице html на той же странице. Я сделал это до этого.MVC pagination in html table

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

Когда я нажимаю кнопку поиска (первый пост http), модель представления имеет все значения, введенные пользователем, но когда я нажимаю кнопку щелчка следующей страницы (вторая позиция), модель представления не сохраняет значения, введенные пользователь в полях ввода поиска.

Мне не рекомендовалось использовать временные данные для передачи значений от одного действия другому действию. Есть ли другой способ сделать это?

+1

Не могли бы вы высказать свой код? – Gjohn

+0

Я еще не сделал кодировку. Я ищу образец. –

ответ

0

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

Это сетка, основанная на JQuery, которая обрабатывает пейджинг, фильтрацию, сортировку и т. Д. Для вас. И если у вас много данных, оно даже позволяет вам получить его на стороне сервера. Помните: «не изобретать велосипед»

+0

Мне не разрешалось использовать данные. Можем ли мы это сделать, используя только MVC? –

0

Да, вам нужно пройти текущий поиск Params в действии PAGE. Помните, что в ASP.NET MVC вам нужно повторно отправить информацию на сервер ... поскольку он не сохраняет состояние.

Если вы используете PagedList пакет, вы делаете:

@Html.PagedListPager(Model.YourList, page => Url.Action("PostAction", new { page, Model.SearchString,Model.OtherFilter, sortOrder = ViewBag.CurrentSort})) 

Если нет, то проверить это: https://github.com/troygoode/PagedList

Там вы можете увидеть некоторые примеры кода ... но компонент может быть установлен через Nuget.

Здесь в Stackoverflow вы можете увидеть много вопросов/ответов о PagedList

2

Рассматривали ли вы PagedList библиотеки для пагинации? Все, что вам нужно сделать, это ссылка на библиотеку PagedList в приложении ASP.NET MVC.

Чтобы установить PagedList.Mvc, выполните следующую команду в консоли диспетчера пакетов. Вы можете использовать NuGet, чтобы получить этот пакет.

PM> Install-Package PagedList.Mvc 

Ваш ViewModel

public class QuestionViewModel 
{ 
     public int QuestionId { get; set; } 
     public string QuestionName { get; set; } 
} 

В контроллере ссылка PagedList

using PagedList; 
and the Index method of your controller will be something like 

public ActionResult Index(int? page) 
{ 
      var questions = new[] { 
       new QuestionViewModel { QuestionId = 1, QuestionName = "Question 1" }, 
       new QuestionViewModel { QuestionId = 1, QuestionName = "Question 2" }, 
       new QuestionViewModel { QuestionId = 1, QuestionName = "Question 3" }, 
       new QuestionViewModel { QuestionId = 1, QuestionName = "Question 4" } 
      }; 

      int pageSize = 3; 
      int pageNumber = (page ?? 1); 
      return View(questions.ToPagedList(pageNumber, pageSize)); 
} 

И ваш Индексный

@model PagedList.IPagedList<ViewModel.QuestionViewModel> 
@using PagedList.Mvc; 
<link href="/Content/PagedList.css" rel="stylesheet" type="text/css" /> 


<table> 

@foreach (var item in Model) { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.QuestionId) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.QuestionName) 
     </td> 
    </tr> 
} 

</table> 

<br /> 

Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount 
@Html.PagedListPager(Model, page => Url.Action("Index", new { page })) 

И результирующий экран будет выглядеть

enter image description here

+0

Я получу миллион записей, когда получу результаты. В вашем примере. 'var question =' Я не могу связать миллионы записей с этой переменной. Когда я нажимаю вторую страницу, мне нужно сделать еще один звонок в БД и получить второй набор записей. хранимая процедура позаботится о возврате второго набора записей. но у меня есть те же самые входные значения поиска, когда я нажимаю кнопку 2-й страницы. –

+0

Тогда вам нужно написать свой собственный код, чтобы сделать это, это не должно быть так сложно. Если входные значения поиска теряются при нажатии кнопки «следующей страницы», то, я думаю, вы сбросите значения модели представления где-нибудь. Если вы используете модель представления с представлением строго типов, тогда она должна сохранять входные значения, если вы не повторно инициализируете класс vm. –

+0

@SaravananGengan ... если вы не делаете «.ToList()», ваш запрос не выполняется в базе данных. Итак ... он выполняется только тогда, когда вы задаете вопросы. ToPagedList (1,20). Таким образом, список будет содержать только 20 записей. Попробуйте с этим ... и проверьте, нужно ли вам другое решение. – Romias