根据当前设置查询参数 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 函数应该:
- 保留所有现有参数,例如 MaxPrice 和制造商
- 仅替换 PageIndex 参数
- 不要使用任何硬编码的控制器和动作值(如控制器='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
我正在为我的项目开发一个标准的分页组件。所有带分页的控制器都在等待 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 函数应该:
- 保留所有现有参数,例如 MaxPrice 和制造商
- 仅替换 PageIndex 参数
- 不要使用任何硬编码的控制器和动作值(如控制器='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