【发布时间】:2012-06-14 16:28:17
【问题描述】:
我没有使用网格,只是使用 MvcContrib 寻呼机。我为 Pager 创建了一个局部视图(因此我可以轻松地将其显示在结果的顶部和底部),它调用 @Html. Pager 方法如下:
@Html.Pager(Model.PagedPrograms).First("<<").Last(">>").Next(">").Previous("<").Format("Item {0} - {1} of {2} ")
只要所有参数都通过 QueryString 传递到页面,这无需额外调整即可工作,因为 Pager 知道在 URL 上重建这些参数。
我想为用户提供更改页面大小的选项(比如 20、50、全部)...我可以在控制器端轻松处理它,我可以编写类似的东西
@if (Model is Foo) {
@Html.ActionLink<SearchController>(sc => sc.Foo(var1, var2, var3, 20), "20")
@Html.ActionLink<SearchController>(sc => sc.Foo(var1, var2, var3, 50), "50");
@Html.ActionLink<SearchController>(sc => sc.Foo(var1, var2, var3, -1), "All");
}
但是对于可能使用此寻呼机的每种模型类型,我都必须这样做......我可能会想太多或者完全倒退,但我想我会问一下,看看是否有人有洞察力。
目前仅从采用 IPagedProgramList(提供 IPagination<ProgramDTO> { get; })的视图调用 Pager,并且我有两个 ViewModel 实现该接口(简单搜索和高级搜索)。但是,如果这个项目增长并且我们添加了使用该接口的新 ViewModel,我将不得不更新 Pager 部分视图,这似乎很糟糕 / 无法缩放 / 等等。
【问题讨论】:
-
难道你不能只有一个 HTML
<select>标签来控制页面大小吗?给元素一个 id 为pageSize,然后在 ActionResult 中查找该参数(确保它可以为空)并相应地设置页面大小?如果为null,则设置一个默认值。 -
我认为你正在做一些事情,尽管它有点棘手。我想我要尝试的是使用带有 jQuery 的 select ...
onchange(function() { $(".pager a").each(... // replace PageSize parameter ); });这可能有效,但我不确定,而且似乎比它应该的更难。 :)
标签: asp.net-mvc-3 razor mvccontrib