2014-03-19 77 views
2

我已經使用這個在我的ASP.NET MVC應用4分頁的記錄列表: http://demo.taiga.nl/MvcPaging/Paging/ViewByCategory如何在ASP.NET MVC索引視圖分頁中使用下拉頁面大小?

我想補充一個下拉改變頁面大小的值。在更改下拉列表中選擇的項目時,我希望頁面大小發生變化。 我不想使用默認頁面大小。

查看評論後 這是我已經在Index.cshtml查看所做的<table>元素之後:Index.cs控制器

<div class="pager"> 
    @Html.Pager(Model.PageSize, Model.PageNumber, Model.TotalItemCount) 
    Displaying @Model.ItemStart - @Model.ItemEnd of @Model.TotalItemCount items(s) 

</div> 

@using (Html.BeginForm()) { 
    <div id="pro_pag2"> 
    @Html.DropDownList("PageSize", new SelectList(new Dictionary<string, int> { { "10", 10 }, { "20", 20 }, { "100", 100 } }, "Key", "Value"), new { @class = "pro_pag_tf1", id = "pagesizelist" }) 
</div> 
} 

@section scripts { 
<script type="text/javascript"> 
    $('#pagesizelist').on('change', function (event) { 
     var form = $(event.target).parents('form'); 

     form.submit(); 
    }); 
</script> 
} 

Index操作:

public ActionResult Index(int? PageSize, int? page) 
{ 
    int? DefaultPageSize = 10; 
    int currentPageIndex = page.HasValue ? page.Value - 1 : 0; 
    if (PageSize != null) { 
     DefaultPageSize = PageSize; 
    } 
    return View(contractsList.ToPagedList(currentPageIndex, (int)DefaultPageSize)); 
} 

變化頁碼的作品。但是當我用下拉菜單改變頁面大小,並選擇2作爲頁碼,那麼它默認爲頁面大小...

我想這是因爲頁面選定按鈕不會提交從下拉列表中選擇的頁面大小.. 。如何從Index操作方法中的下拉列表中選擇值?

每次我選擇頁面按鈕時,如何從下拉菜單中選擇值?它似乎只是選擇下拉菜單?

也許有更好的解決方案?

回答

2

基於上述代碼,第2頁的生成的鏈接將是這樣的:

<a href="/Index?page=2">2</a> 

,而這應該是正確生成的鏈接,如果您更改頁面大小爲20

<a href="/Index?PageSize=20&page=2">2</a> 

您需要做的是根據所選頁面大小將PageSize參數添加到所有頁碼鏈接。 http://demo.taiga.nl/MvcPaging/Paging/ViewByCategory中的示例使用ViewBag根據所選類別將categoryName參數添加到每個頁碼鏈接,因此我建議使用類似的方法。

首先,你的控制器方法改成這樣:

public ActionResult Index(int? PageSize, int? page) 
{ 
    int? DefaultPageSize = 10; 
    int currentPageIndex = page.HasValue ? page.Value - 1 : 0; 
    if (PageSize != null) { 
     DefaultPageSize = PageSize; 
    } 

    ViewBag.PageSize = DefaultPageSize; 

    return View(contractsList.ToPagedList(currentPageIndex, (int)DefaultPageSize)); 
} 

然後在視圖代碼更改<div class="pager">內容本

<div class="pager"> 
    @Html.Pager(Model.PageSize, Model.PageNumber, Model.TotalItemCount).Options(o => o.AddRouteValue("PageSize", ViewBag.PageSize)) 
    Displaying @Model.ItemStart - @Model.ItemEnd of @Model.TotalItemCount items(s) 

</div> 
相關問題