2014-09-02 2 views
1

Im using Grid.MVC в моем веб-приложении MVC При тестировании на пустой странице с помощью указательного контроллера он успешно работает с разбиением на страницы и фильтрацией. Проблема возникает, когда я помещаю ее в свой проект шаги, которые я делаю, чтобы сделать ajax-запрос (потому что мне не нужно перезагружать страницу) в метод и вернуть частичный вид, содержащий результат поиска по Grid.Mvc результат и количество страниц возвращаются успешно, но когда я нажимаю на следующую страницу или фильтрую, он не работает.пейджинг Grid.MVC не работает

Код:

Вид:

@using (Ajax.BeginForm("Search", "Home", 
     new AjaxOptions 
     { 
      HttpMethod = "POST", 
      InsertionMode = InsertionMode.Replace, 
      UpdateTargetId = "SearchResult" 
     })){ 
@Html.DropDownList("Province", "Province") 
@Html.DropDownList("Cities", "Cities") 
<span>price from :</span> <input type="text" name="Pricefrom" /> 
<span>to :</span>   <input type="text" name="Priceto" /> 
    <input type="submit" value="Search" />  } 

Поиск Контроллер:

[HttpPost] 
    public ActionResult Search(int? page , int Province = 0, int Cities = 0, int Pricefrom = 0, int Priceto = 0) 
    { 
     var ads = db.Ad.Where(a => (Cities == 0 || a.CityId == Cities) && 
            (Province == 0 || a.Cities.ProvinceId == Province)&& 
            (Pricefrom == 0 || a.Price >= Pricefrom)&& 
            (Priceto == 0 || a.Price <= Priceto)).OrderBy(a => a.AdDate).ToList(); 

     return PartialView("_Search", ads); 
    } 

PartialView:

@using GridMvc.Html 
@model IEnumerable<Semsark.Areas.Backend.Models.Ad> 
<div> 
@Html.Grid(Model).Columns(columns => 
     { 
      columns.Add(c => c.Id).Titled("ID"); 
      columns.Add(c => c.AdTitle).Titled("title"); 
      columns.Add(c => c.AdBody).Titled("body"); 
     }).WithPaging(2).Sortable(true) 
</div> 

скрипты и стили в View index.cshtml:

<head> 
<meta name="viewport" content="width=device-width" /> 
<link href="@Url.Content("~/Content/Gridmvc.css")" rel="stylesheet" /> 
<script src="@Url.Content("~/Scripts/gridmvc.min.js")"></script> 
<script src="~/Scripts/gridmvc.lang.ru.js"></script> 
<title>Index</title> 

Заранее спасибо за любую помощь,

+0

вы используете пакет Grid.Mvc.Ajax? –

ответ

0

Пытались ли вы пройти через IQueryable список вместо IEnumerable? Согласно документации, Gridmvc.Html требует IQueryable для подкачки. Есть некоторые тонкие различия между IQueryable и IEnumerable, которые могут иметь значение здесь.

0

Эти сценарии необходимы для пейджинга:

"~/Scripts/GridMvc/URI.js" 
"~/Scripts/GridMvc/gridmvc.min.js" 
"~/Scripts/GridMvc/gridmvc-ext.js" 
1
@*Webgrid using Paging in mvc 4. 

View Page **.cshtml** *@ 

    @model MvcPopup.Models.PagedEmployeeModel 

    @{ 
     //ViewBag.Title = "SearchEmployee"; 
     Layout = null; 
    } 

    @{ 
     WebGrid grid = new WebGrid(rowsPerPage: Model.PageSize); 
     grid.Bind(Model.Employee, 
        autoSortAndPage: false, 
        rowCount: Model.TotalRows 
     ); 
    } 

    @grid.GetHtml(
     fillEmptyRows: false, 
     alternatingRowStyle: "alternate-row", 
     headerStyle: "grid-header", 
     footerStyle: "grid-footer", 
     mode: WebGridPagerModes.All, 
       firstText: "<< First", 
       previousText: "< Prev", 
       nextText: "Next >", 
       lastText: "Last >>", 
     columns: new[] { 


      grid.Column("Name", 
         header: "Name", 
         format: @<text> 
          @Html.ActionLink((string)item.Name, "ViewEmployeeDetail", new { id = item.id }, new { @class = "viewDialog" })</text> 
         ), 
      grid.Column("Department"), 
      grid.Column("City"), 
       grid.Column("State"), 
      grid.Column("Country", 
         header: "Country" 
      ), 
      grid.Column("Mobile"), 
      grid.Column("", 
         header: "Actions", 
         format: @<text> 
          @Html.ActionLink("Edit", "EditEmployee", new { id = item.id }, new { @class = "editDialog" }) 
          | 

          @Html.ActionLink("Delete", "Delete", new { id = item.id }, new { @class = "confirmDialog"}) 
         </text> 
      ) 
    }) 

@*----------------------------------- 
Model folder under modelservices.cs file 
=================================*@ 

    public IEnumerable<Employee> GetEmployeePage(int pageNumber, int pageSize, string searchCriteria) 
      { 
       if (pageNumber < 1) 
        pageNumber = 1; 

       return db.Employees 
        .OrderBy(m =>m.Name) 
        .Skip((pageNumber - 1) * pageSize) 
        .Take(pageSize) 
        .ToList(); 
      } 
      public int CountAllEmployee() 
      { 
       return db.Employees.Count(); 
      } 
      public class PagedEmployeeModel 
     { 
      public int TotalRows { get; set; } 
      public IEnumerable<Employee> Employee { get; set; } 
      public int PageSize { get; set; } 
     } 

@*Controller folder under create file like employeecontroller.cs *@ 

    using MvcPopup.Models; 
    using System.Globalization; 
    using System.Text; 

    namespace MvcPopup.Controllers 
    { 
     public class EmployeeController : Controller 
     { 
      // 
      // GET: /Employee/ 
      ModelServices mobjModel = new ModelServices(); 
      public ActionResult Index() 
      { 
       return View(); 
      } 
      public ActionResult SearchEmployee(int page = 1, string sort = "name", string sortDir = "ASC") 
      { 
       const int pageSize = 5; 
       var totalRows = mobjModel.CountAllEmployee(); 

       sortDir = sortDir.Equals("desc", StringComparison.CurrentCultureIgnoreCase) ? sortDir : "asc"; 

       var validColumns = new[] { "id", "name", "department", "country" }; 
       if (!validColumns.Any(c => c.Equals(sort, StringComparison.CurrentCultureIgnoreCase))) 
        sort = "id"; 

       var employee = mobjModel.GetEmployeePage(page, pageSize, "it." + sort + " " + sortDir); 

       var data = new PagedEmployeeModel() 
       { 
        TotalRows = totalRows, 
        PageSize = pageSize, 
        Employee = employee 
       }; 
       return View(data); 
      } 
    ------------------------ 
Смежные вопросы