根据当前设置查询参数 URL

Set query parameter based on current URL

我正在为我的项目开发一个标准的分页组件。所有带分页的控制器都在等待 URL.

中的 PageIndex 参数

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

例如,我有针对我的网上商店的过滤器,例如 Manufacturer 和 MaxPrice。 用户打开 mystore.com/products?manufacturer=Apple&MaxPrice=999 link.

然后他想转到第 3 页。所以我分页中的 3 页 link 应该有 mystore.com/products?manufacturer=Apple&MaxPrice=999&PageIndex=3 link.

所以需要的 MVC 函数应该:

  1. 保留所有现有参数,例如 MaxPrice 和制造商
  2. 仅替换 PageIndex 参数
  3. 不要使用任何硬编码的控制器和动作值(如控制器='Products'、动作='Index')

我尝试使用此代码:

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

除了 2 规则外,它工作正常 - 它不会保留其他参数。 所以如果用户点击这个 link 他会去 mystore.com/products?PageIndex=3

我建议通过使用查询字符串 "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, "");

您可以使用这些来获取当前 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

url = url+"&PageIndex=3";

推荐

或者您可以使用

获取 url 参数
@Url.RequestContext.RouteData.Values["manufacturer"]
@Url.RequestContext.RouteData.Values["MaxPrice"]

并使用这些值在 View

中构建新的 URL