【问题标题】:Struggling to Customise PagedList.Mvc努力自定义 PagedList.Mvc
【发布时间】:2016-03-02 12:22:26
【问题描述】:

我有一个使用 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> 标签的类属性。 (理想情况下,我希望能够挂钩到被点击的<a> 标签,这样我总是可以获得当前的过滤器,但是一旦我能真正找到正在生成的页面锚点,那就是下一个问题!)

【问题讨论】:

  • 是什么让您认为您应该更改网址?正常的做法是在包含过滤控件的视图中有一个表单(FormMethod.Get),然后提交表单,根据表单控件过滤数据并返回视图。
  • 应用程序当前的结构方式,过滤器控件是包含可在任何页面上使用的表单的部分。 Pager 在每个页面的底部有一个单独的部分,并构建了一系列 A 标签。由于这不在表单中,我需要一种机制将表单值发送回寻呼机生成的 url。
  • 您通过使用表单并发布到 GET 方法来执行此操作。
  • 分页器不在表单中,出现在页面底部,而过滤器在顶部(客户想要的位置)。所以你建议我包装分页内容,和表单内的寻呼机?由于寻呼机不提交表单,只是创建了一系列页面链接,我不明白这将如何帮助将表单值传回。 (虽然我打算启动开发工作站并尝试这个,因为我怀疑我错过了明显的:-)
  • 寻呼机不应该在表单中。给我一点时间,我会给你一个指向另一个答案的链接,说明如何做到这一点。

标签: c# asp.net-mvc


【解决方案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) 

)

【讨论】:

  • 这不是一个合适的答案(cmets 可能会被删除),毫无疑问很快就会被删除,所以除非你想添加详细的答案,否则我会将其标记为骗子
  • 编辑了我的答案以包含详细信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-02
  • 2018-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多