Asp.net mvc 2 asp.net MVC 2中的查询字符串格式
似乎是一个很难回答的问题,但我自己也不太明白 我有一个像这样的actionlinkAsp.net mvc 2 asp.net MVC 2中的查询字符串格式,asp.net-mvc-2,query-string,routevalues,Asp.net Mvc 2,Query String,Routevalues,似乎是一个很难回答的问题,但我自己也不太明白 我有一个像这样的actionlink Html.ActionLink( "Test", "test", new { q = "search+twitter" } ) 这将生成一个url字符串,如下所示 但是我想保留加号(我假设它是URLPATHENDED),这样我就可以得到下面的url 在仍然使用Html.ActionLink的情况下,有没有一种简单的方法可以做到这一点?加号(编码后)表示编码前的空格 因此,search+twitter将在帖子
Html.ActionLink( "Test", "test", new { q = "search+twitter" } )
这将生成一个url字符串,如下所示
但是我想保留加号(我假设它是URLPATHENDED),这样我就可以得到下面的url
在仍然使用Html.ActionLink的情况下,有没有一种简单的方法可以做到这一点?加号(编码后)表示编码前的空格
因此,search+twitter
将在帖子背面变成“search twitter”,要实现这一效果,您只需首先使用“search twitter”:
Html.ActionLink( "Test", "test", new { q = "search twitter" } )
ActionLink(“Test”,“Test”,new{q=“search twitter”})
哪个将生成以下url
希望这能有所帮助。在谷歌搜索了一段时间后,我在中重新改写了这个问题。使用这个问题的答案,我能够组合出一个合适的路由扩展方法,我将在下面介绍
public static class RouteCollectionExtensions
{
public static void CustomMapRoute( this RouteCollection routes, string name, string url, object defaults )
{
routes.CustomMapRoute( name, url, defaults, null, null );
}
public static void CustomMapRoute( this RouteCollection routes, string name, string url, object defaults, string[] namespaces )
{
routes.CustomMapRoute( name, url, defaults, namespaces, null );
}
public static void CustomMapRoute( this RouteCollection routes, string name, string url, object defaults, string[] namespaces, object constraints )
{
if ( routes == null )
throw new ArgumentNullException( "routes" );
if ( url == null )
throw new ArgumentNullException( "url" );
var route = new CustomRoute( url, new MvcRouteHandler() )
{
Defaults = new RouteValueDictionary( defaults ),
Constraints = new RouteValueDictionary( constraints ),
DataTokens = new RouteValueDictionary()
};
if ( (namespaces != null) && (namespaces.Length > 0) )
{
route.DataTokens["Namespaces"] = namespaces;
}
if ( String.IsNullOrEmpty( name ) )
routes.Add( route );
else
routes.Add( name, route );
}
}
public class CustomRoute : Route
{
public CustomRoute( string url, IRouteHandler routeHandler )
: base( url, routeHandler ) { }
public CustomRoute( string url, RouteValueDictionary defaults, IRouteHandler routeHandler )
: base( url, defaults, routeHandler )
{ }
public override VirtualPathData GetVirtualPath( RequestContext requestContext, RouteValueDictionary values )
{
var path = base.GetVirtualPath( requestContext, values );
if ( path != null )
{
path.VirtualPath = path.VirtualPath.Replace( "%20", "+" );
}
return path;
}
}
然后,global.asax中的RegisterRoutes方法调用此扩展,就像这样
routes.CustomMapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
new string[] { "MyControllers" }
);
谢谢你的回答。然而,我实际上希望在我的浏览器中有一个url,我仍然不知道如何实现这一点。如果这是你的目标,一个解决方案可能是为HtmlHelper创建自己的扩展方法来生成url。-1:这个答案基本上重新表述了这个问题,但没有提出任何解决方案。