【发布时间】:2019-06-01 08:54:47
【问题描述】:
我正在为我的项目开发一个标准的分页组件。所有带分页的控制器都在等待 URL 中的 PageIndex 参数。
所以我想根据当前的URL生成URL,除了PageIndex参数。
例如,我为我的网上商店设置了过滤器,例如 Manufacturer 和 MaxPrice。
用户打开mystore.com/products?manufacturer=Apple&MaxPrice=999 链接。
然后他想去那 3 页。所以我的分页中的 3 页链接应该有 mystore.com/products?manufacturer=Apple&MaxPrice=999&PageIndex=3 链接。
所以需要的MVC函数应该:
- 保留所有现有参数,例如 MaxPrice 和制造商
- 仅替换 PageIndex 参数
- 不要使用任何硬编码的控制器和操作值(例如控制器 = 'Products'、Action = 'Index')
我尝试使用此代码:
<a class="page-link" href="@Url.RouteUrl(new { PageIndex = page })">
@page
</a>
除了 2 规则外它工作正常 - 它不会保留其他参数。
所以如果用户点击这个链接,他会去mystore.com/products?PageIndex=3
【问题讨论】:
-
你想根据当前url生成url,你能告诉我为什么吗?
-
添加我想要的图片。希望能帮助到你。是的,你说得对 - 我想根据当前 URL 生成一个新 URL,以保留其他过滤器参数(如制造商和 MaxPrice)。换句话说,我不想在点击我的分页的第 3 页后从 URL 重置 MaxPrice 过滤器(见图)。所以 3 页链接应该有来自原始 URL 的 MaxPrice 和 Manufacturer 参数
-
完美,我建议通过使用查询字符串“Request.Url.AbsoluteUri”获取currentUrl来动态构建url,然后从url中删除pageIndex(如果存在),然后再次添加页面索引,如果你不明白让我知道我可以提供帮助。提示: url 必须在剃刀中定义为变量,以使事情变得更容易。
-
我知道如何手动完成(就像你描述的那样),但它看起来像一个粗糙而丑陋的解决方案。我认为在 Asp.net Core MVC 中有一些标准解决方案可以解决此类问题(
-
您可以通过创建扩展方法来简化事情,以避免向剃须刀添加复杂的代码,我认为没有内置方法可以满足您的要求
标签: asp.net routes asp.net-core-mvc asp.net-core-2.0