2016-09-09 23 views
0

私はPagedList.Mvcを使用していますが、少し問題があります。だから私はドロップダウンリストから国を選択し、ajaxを使用して送信することができますインデックスのビューがあります。ASP.NET PagedList.MVC for PartialView

ビュー:私のGETEMPLOYEEコントローラの方法で

@model testModel.Models.Test 

@using (Ajax.BeginForm("GetEmployee", "Test", new AjaxOptions 
{ 
    HttpMethod = "POST",  
    UpdateTargetId = "showResult" 
})) 
{ 
@Html.AntiForgeryToken() 
    @Html.DropDownList("CountryId", null, "-- Select Country --")    
    <input type="submit" value="Search" class="btn btn-default" /> 
} 

<div id="showResult"></div> 

、私はデシベルをループして部分図にモデルオブジェクトを渡しています。

コントローラー:私のpartialEmployeeビューで

[HttpPost] 
    public ActionResult GetEmployee(int CountryId, int? page) 
    {    
     var model = db.Employee 
      .Include(x => x.Country)    
      .Where(x => x.Country.CountryId == CountryId)    
      .ToList(); 

     int pageSize = 3; 
     int pageNumber = (page ?? 1); 

     return PartialView("PartialEmployee", model.ToPagedList(pageNumber, pageSize));    
    } 

、私は、テーブル内の従業員の名前を示しています。

PartialEmployeeビュー:

@model PagedList.IPagedList<testModel.Models.Employee> 
@using PagedList.Mvc; 
<link href="~/Content/PagedList.css" rel="stylesheet" type="text/css" /> 

@{ 
    Layout = null; 
} 

<table class="table table-hover"> 
    <tr> 
     <th>Username</th> 
    </tr> 

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

</table> 
<br /> 
Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount 

<div id="contentPager"> 
    @Html.PagedListPager(Model, page => Url.Action("Index", new { page })) 
</div> 

ので、ここでの問題は、私は次のページでクリックしたときにということである(例:2)それはUpdateTargetIdに示す任意のテーブルずにバックインデックスページに戻ります。

<div id="showResult"></div> 

どのような提案やサンプルコードをいただければ幸いです。

+0

何が起こると思われますか?デフォルトでは、PagedListはajaxを呼び出すことはありませんが、ajaxを使用するオプションはありますが、例については[この回答](http://stackoverflow.com/questions/24679320/ajax-pagedlist-with-partial-view)を参照してください。 –

+0

申し訳ありません。リンクには良い例があると思います。私が家に帰るときに私は試してみる。 – pavilion

+0

@StephenMuecke PagedListにはajaxを使用するオプションがあり、それを私のケースに適用できると思いますか?だから私の場合、最初のページャはうまく見えますが、次のページャをクリックすると、テーブルが消えて最初のインデックスページに戻ります。 – pavilion

答えて

0

さて、Url.Action("GetEmployee", new { page, CountryId=Model.FirstOrDefault().CountryId })に、I理解した。

ViewBag.CountryId = CountryIdを追加する必要がありました。 GetEmployeeメソッド内に が含まれているため、ビューで使用できます。だから、ビューの

は:

@Html.PagedListPager(Model, page => Url.Action("GetEmployee", 
    new 
    { 
     page, 
     CountryId = ViewBag.CountryId   
    }), PagedListRenderOptions.EnableUnobtrusiveAjaxReplacing(new AjaxOptions() { HttpMethod = "GET", UpdateTargetId = "showResult" })) 

それはスムーズに働きました。

0
  1. 変更GetEmployee()方法
  2. からGET代わり
  3. POSTの削除HttpPost属性にWebメソッドの種類は変更あなたのUrl.actionスティーブンとアルドのコメントに基づいて
+0

いいえ、あなたのCountryId = Model.FirstOrDefault()CountryIdはpartialViewではなく、Index Viewでのみ呼び出されるので意味がありません。 – pavilion

関連する問題