苦苦于自定义PagedList.Mvc

时间:2016-03-02 12:22:27

标签: c# asp.net-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中,因此我无法使用它来操作该URL。

我很欣赏我当前的方法已经存在缺陷,就好像过滤器被更改一样,这发生在DocumentReady函数之外。但是现在我只想了解为什么使用上面的代码,我没有看到<a>标签的class属性。 (理想情况下,我更喜欢能够挂钩被点击的<a>标签,所以我总能得到当前的过滤器,但是一旦我真正找到正在生成的页面锚点,这就是下一个问题!)

1 个答案:

答案 0 :(得分: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) 

)
相关问题