2017-10-03 37 views
0

カテゴリでフィルタリングすると、ページが正しく表示されます。検索ボックスから検索すると、最初のページに結果が表示され、すべてのプロジェクトのページ数が表示されます。Asp.Netで検索コアMVC

下記の私のコントローラ:

 public ActionResult Index(string category, string search, int page = 1) 
    { 
     var viewModel = new ProductsListViewModel(); 

     var query = repository.Products; 


     if (!String.IsNullOrEmpty(category)) 
     { 
      query = query.Where(p => p.Category == category); 
      viewModel.CurrentCategory = category; 
     } 

     if (!String.IsNullOrEmpty(search)) 
     { 
      query = query.Where(p => p.Name.Contains(search) || 
      p.Details.Contains(search); 
      viewModel.Search = search; 
     } 

     viewModel.Products = query 
         .OrderByDescending(p => p.ProductID) 
         .Skip((page - 1) * PageSize) 
         .Take(PageSize).ToList(); 


     viewModel.PagingInfo = new PagingInfo() 
     { 
      CurrentPage = page, 
      ItemsPerPage = PageSize, 
      TotalItems = category == null ? 
         repository.Products.Count() : 
         repository.Products.Where(e => 
          e.Category == category).Count() 

     }; 

     return View(viewModel); 
    } 

ビューのための私のページへのリンク:

<div style="padding-bottom: 10px" page-model="@Model.PagingInfo" page-action="Index" page-classes-enabled="true" page-class="btn" page-class-normal="btn-default" page-class-selected="btn-primary" page-url-category="@Model.CurrentCategory" class="btn-group pull-right"> </div>

マイPagingInfo.csは次のとおりです。

public int TotalItems { get; set; } 
    public int ItemsPerPage { get; set; } 
    public int CurrentPage { get; set; } 

    public int TotalPages => 
     (int)Math.Ceiling((decimal)TotalItems/ItemsPerPage); 
+0

'.Where(p => p.Description.Contains(search))'? – Pawel

+0

パラメータ –

+0

@ Pawelに従って検索を適用するには、クエリー可能なにクエリーをキャストする必要があります。 '.Where(p => category)で' .Where(p => p.Description.Contains(search) == null || p.Category == category) '同じメソッドの中で? – RochaCarter07

答えて

1

あなたが好きそれを破ることができこれは:

public ActionResult List(string category, string search, int page = 1) 
{ 
    var model = new ProductsListViewModel(); 

    var query = repository.Products; 


    if (!String.IsNullOrEmpty(category)) 
    { 
     query = query.Where(p => p.Category == category); 
     model.CurrentCategory = category; 
    } 

    if (!String.IsNullOrEmpty(search)) 
    { 
     query = query.Where(p => p.Description.Contains(search)); 
     model.Search = search; 
    } 

    var count = query.Count(); 

    model.Products = query 
        .OrderByDescending(p => p.ProductID) 
        .Skip((page - 1) * PageSize) 
        .Take(PageSize).ToList(); 

    model.PagingInfo = new PagingInfo() 
       { 
        CurrentPage = page, 
        ItemsPerPage = PageSize, 
        TotalItems = count 
       }; 

    return View(model); 
} 
関連する問題