- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个显示项目列表的局部 View ,我在几个不同的地方使用这个局部 View 。在这个局部 View 中,我使用了一个分页器 -
@Html.PagedListPager(Model, page => Url.Action(null, new { page = page }))
这会导致分页器显示我正在查看的任何 Action 和 View 的页面 URL。
问题是,在我的搜索页面上,我使用查询字符串作为搜索字符串,而 Url.Action 方法不包含现有的查询字符串参数。
我最终使用/Search?s=bla&page=3 而不是/Search?page=3
如何使用现有的查询字符串生成 url?
编辑:
这是我的代码
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.Add(
"Search",
new SearchRoute("Search", new MvcRouteHandler())
{
Defaults = new RouteValueDictionary(
new { controller = "Search", action = "Index" })
});
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Call", action = "Index", id = UrlParameter.Optional }
);
}
public class SearchRoute : Route
{
public SearchRoute(string url, IRouteHandler routeHandler)
: base(url, routeHandler)
{
}
public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
{
System.Diagnostics.Debug.WriteLine(Url);
if (HttpContext.Current != null)
{
string s = HttpContext.Current.Request.QueryString["s"];
if (!string.IsNullOrEmpty(s))
values.Add("s", s);
}
return base.GetVirtualPath(requestContext, values);
}
}
最佳答案
使用自定义路由,您可以保留查询字符串,因为大多数 Url 生成逻辑使用路由来生成 URL。在这种情况下,我正在检查 Request 对象中是否有名为 XXX 的查询字符串,如果它存在,则将其添加到路由中,如果您愿意,可以使其更通用。
using System.Web;
using System.Web.Routing;
public class PreserveQueryStringRoute : Route
{
public PreserveQueryStringRoute(string url, IRouteHandler routeHandler)
: base(url, routeHandler)
{
}
public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
{
if(HttpContext.Current != null)
{
values = new RouteValueDictionary(values); //this is the bug fix!
if (!string.IsNullOrEmpty(HttpContext.Current.Request.QueryString["XXX"]))
values.Add("XXX", HttpContext.Current.Request.QueryString["XXX"]);
}
var path = base.GetVirtualPath(requestContext, values);
return path;
}
}
按照常规在 global.ascx 中注册路由(尽管可能不是像我下面这样的通用匹配)
routes.Add(
"Default",
new PreserveQueryStringRoute("{controller}/{action}/{id}", new MvcRouteHandler())
{
Defaults = new RouteValueDictionary(
new { controller = "Home", action = "Index", id = UrlParameter.Optional })
});
编辑:
好的,这是一个更新..它是一个错误修复,以及一个如何注册路由的示例(请参阅上面的更正代码以获取错误修复)
注册方法如下:
routes.Add(
"Search",
new SearchRoute("Search", new MvcRouteHandler())
{
Constraints = new RouteValueDictionary(
new { controller = "Search", action = "Index" })
});
关于c# - 根据当前 URL 生成 URL 并维护 QueryString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8919851/
我喜欢使用 Python 的 SimpleHTTPServer 来本地开发各种需要通过 Ajax 调用等方式加载资源的 Web 应用程序。 当我在我的 URL 中使用查询字符串时,服务器总是重定向到相
我们正在使用 Swagger/Swashbuckle 生成 OpenApi 定义。然后将此定义导入到 Azure API 管理中。 我们在 get 请求中有一些我们标记为必需的查询字符串参数。我们的验
我有一个带有查询字符串的页面请求,例如http://www.xyz.net/Orders.aspx?OrderID=1。该页面显示在浏览器中。现在页面上有一个 asp:LinkButton ,它应
我们有以下重写规则: RewriteRule ^([A-Za-z0-9\_]+)$ index.php?rewrite=$1 [L,QSA] 我们想知道是否有一种方法可以让 ?rewrite=$1
我们有以下重写规则: RewriteRule ^([A-Za-z0-9\_]+)$ index.php?rewrite=$1 [L,QSA] 我们想知道是否有一种方法可以让 ?rewrite=$1
我需要http://profiles.mysite.com/Me显示什么http://mysite.com/profile.php?user=Me会显示。 “我”根据用户名而变化。它可以包含空格并且不
我正在努力实现以下条件 orgId =“z2store”,类型 =“web”,日期时间 =“12:17:08” 下面是我写的查询 GET /sample/_search { "bool" : {
我有一个网址: http://mywebsite.com/Account/?Number=25191108&Name=Something&Remote=False 我想重定向到: http://ano
是否可以在回发时附加到查询字符串?如果是,您到底是怎么做到的? 谢谢! 最佳答案 据我所知不是。您对 ASP.NET 的回发没有太多控制。对于另一种类型的应用程序,您可以发布到另一个页面。我知道在 a
我在一个支付平台上工作,为了响应支付,一个简单的 GET 调用,在查询字符串中有一些参数,是对我的听众的: http://localhost/mytest/listener?TIMECREATED=0
方法一: 在 JavaScript 中,可以使用 URLSearchParams 对象来处理 URL 中的查询字符串. 序列化(将 JavaScript 对象转换为查询字符串)可以使用 URLSe
一,开篇分析 这篇文章把这三个模块拿来一起说,原因是它们各自的篇幅都不是很长,其次是它们之间存在着依赖关系,所以依次介绍并且实例分析。废话不多说了,请看下面文档: (1),"Url模块
我想将查询字符串附加到页面内的所有动态链接上 - 以修复旧版本中的错误 - 这可能吗? 有什么想法吗? 最佳答案 类似这样的吗? var querystring = 'myquerystringtoa
我使用以下代码从 LogIn.aspx 获取 LogedInUser 并将其发送到 Chat.aspx 然后将其发送到 FrmForAjaxCalls 从 Db 返回数据并将其填充到 div 上,但在
我今天在 Web 应用程序中重构一些代码,并在所有网页的基类中遇到了类似的内容: if (Request.QueryString["IgnoreValidation"] != null) {
我想创建一个联系人页面, 我有以下代码: #:Name# #:Surname# 还有两个值(contactNumber 和 Email) 在第一个 View 中,我只显示名称,我想在单击时
大家早上好, 我有一个系统,需要发送一封电子邮件,其中包含我在 JS 中的一些变量。代码一开始对我来说看起来不错,但是 Request.QueryString 没有返回任何内容。我正在尝试使用 Req
在 aspx 页面中我有 anchor 标记。我的 URL 已经有我想重用的 Id 参数。要求是将用户重定向到具有当前 url id 的提及页面,例如 "~/Dir/Home?Id=" & Reque
我使用 request.querystring 只是为了访问我从一个页面传递到另一个页面的参数。 它给了我一个错误。 Non-invocable member 'System.Web.HttpRequ
此问题与上一个问题相关 Passing Variable from page to page using ASP.NET (C#) without using QueryString 我的情况的不同之
我是一名优秀的程序员,十分优秀!