【问题标题】:Set query parameter based on current URL根据当前 URL 设置查询参数
【发布时间】: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函数应该:

  1. 保留所有现有参数,例如 MaxPrice 和制造商
  2. 仅替换 PageIndex 参数
  3. 不要使用任何硬编码的控制器和操作值(例如控制器 = '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


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

【讨论】:

    【解决方案2】:

    你可以使用这些来获取当前的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+"&PageIndex=3";
    

    推荐

    或者你可以用

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

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

    【讨论】:

      猜你喜欢
      • 2018-09-09
      • 1970-01-01
      • 2015-06-30
      • 2013-04-08
      • 1970-01-01
      • 2016-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多