根据当前URL设置查询参数

时间:2019-01-06 13:02:47

标签: asp.net routes asp.net-core-mvc asp.net-core-2.0

我正在为我的项目开发标准的分页组件。所有具有分页的控制器都在等待URL中的PageIndex参数。

所以我想根据当前URL生成URL,除了PageIndex参数。

例如,我为制造商和MaxPrice之类的互联网商店提供了过滤器。 用户打开mystore.com/products?manufacturer=Apple&MaxPrice=999链接。

然后,他想转到3页。因此,我的分页中的3页链接应具有mystore.com/products?manufacturer=Apple&MaxPrice=999&PageIndex=3链接。

enter image description here

因此所需的MVC功能应:

  1. 持久化所有现有参数,例如MaxPrice和制造商
  2. 仅替换PageIndex参数
  3. 请勿使用任何硬编码的控制器和操作值(例如controller ='Products',Action ='Index')

我尝试使用以下代码:

<a class="page-link" href="@Url.RouteUrl(new { PageIndex = page })">
    @page
</a>

除了2条规则外,它都可以正常工作-它不会保留其他参数。 因此,如果用户单击此链接,他将转到mystore.com/products?PageIndex=3

2 个答案:

答案 0 :(得分:1)

我建议通过获取带有查询字符串“ Request.Url.AbsoluteUri”的currentUrl来动态构建URL,然后从URL中删除pageIndex(如果存在),然后再次添加页面索引。

提示:必须在剃须刀中将url定义为变量,以简化操作

要删除查询字符串,可以使用正则表达式

string queryString = "Default.aspx?Agent=10&Language=2"; //Request.QueryString.ToString();
string parameterToRemove="Language";   //parameter which we want to remove
string regex=string.Format("(&{0}=[^&\s]+|{0}=[^&\s]+&?)",parameterToRemove);
string finalQS = Regex.Replace(queryString, regex, "");

答案 1 :(得分:0)

您可以使用它们来获取当前网址

*funcargs

然后您可以像这样添加页面索引并重定向到该URL

*args

推荐

或者您可以使用

获取url参数。
string url = HttpContext.Current.Request.Url.AbsoluteUri;
// http://localhost:1302/TEST/Default.aspx

string path = HttpContext.Current.Request.Url.AbsolutePath;
// /TEST/Default.aspx

并使用这些值在视图内构建新的URL