2016-03-02 64 views
0

我有一個使用PagedList.MVC的項目。正在努力自定義PagedList.Mvc

我有一個屏幕上,我想讓用戶能夠檢索過濾數據集(篩選開始日期,結束日期和地點)。

現在我的想法是在DocumentReady中添加一些jquery,並使用它替換每個頁面的URL中的佔位符。

所以現在我有以下代碼:

PagedListRenderOptions pagerOptions = new PagedListRenderOptions() 
{  
    FunctionToTransformEachPageLink = (liTag, aTag) => { aTag.Attributes.Add("class","foo"); liTag.InnerHtml = aTag.ToString(); return liTag;}, 
    DisplayPageCountAndCurrentLocation=true  
}; 

@Html.PagedListPager(Model, 
page => Url.Action(ViewBag.Method, new { page, AllOptions = PagedDealershipLocation, StartDate = "stPageDate", EndDate = "endPageDate" }), 
    PagedListRenderOptions.EnableUnobtrusiveAjaxReplacing(pagerOptions, ajaxopts) 

然而,當分頁列表呈現,類沒有被添加到HTML,這樣我就可以」用它來操縱網址。

我明白我目前的方法已經存在缺陷,就好像過濾器已更改一樣,這發生在DocumentReady函數之外。但是現在我只想了解爲什麼使用上面的代碼,我沒有看到<a>標籤的class屬性。 (理想情況下,我傾向於能夠鉤入被點擊的標籤,因此我總是可以獲得當前的過濾器,但是一旦我實際上可以找到正在生成的頁面定位符,這就是下一個問題!)

+0

什麼讓你覺得你應該改變網址?常規方法是在包含過濾控件的視圖中有一個窗體(帶有'FormMethod.Get'),然後提交表單,根據窗體控件過濾數據並返回視圖。 –

+0

當前應用程序的結構方式是,過濾器控件是包含可在任何頁面上使用的表單的部分。 尋呼機在每個頁面的底部分開一段,並建立一系列A標籤。由於這不是形式,我需要一種機制將表單值發送回由尋呼機生成的url。 – Matt

+0

您可以通過使用表單併發布到GET方法來完成。 –

回答

1

是放棄javascript,並通過ViewBag將過濾器所需的值放回到視圖中。

ViewBag.StartDate = StartDate; 
    ViewBag.EndDate = EndDate; 

比,作爲我的尋呼機是在局部的,我也不得不從Viewbag到部分傳遞數據;

@Html.Partial("_Pager", @Model, new ViewDataDictionary {{ "Method", ViewBag.MethodName }{ "StartDate", ViewBag.StartDate }, { "EndDate", ViewBag.EndDate } }) 

然後,我可以通過將StartDate和EndDate添加到尋呼機來關閉該圓。

@Html.PagedListPager(Model, 
    page => Url.Action(ViewBag.Method, new { page, 
              StartDate = ViewBag.StartDate, EndDate = ViewBag.EndDate}), 
    PagedListRenderOptions.EnableUnobtrusiveAjaxReplacing(pagerOptions, ajaxopts) 

) 
+0

這不是一個合適的答案(評論可以被刪除),並且毫無疑問很快會被刪除,所以我會將其標記爲複製,除非您想添加詳細的答案 –

+0

編輯我的答案以包含詳細信息。 – Matt