C# 如何使用Html.ActionLink创建查询字符串
在我的mvc3 razor项目中,我有动作链接C# 如何使用Html.ActionLink创建查询字符串,c#,asp.net-mvc-3,razor,C#,Asp.net Mvc 3,Razor,在我的mvc3 razor项目中,我有动作链接 @Html.ActionLink("ActionLinkName","Count","Home",new{id = 3}) 这将生成localhost/Home/Count/3 但我希望它创建localhost/Home/Count?id=3 我应该对路由进行哪些更改?这是因为新MVC项目使用的默认路由包括一个{id}段。从默认路由中删除该段将使现有代码生成查询字符串 更改此项: routes.MapRoute( "Default",
@Html.ActionLink("ActionLinkName","Count","Home",new{id = 3})
这将生成localhost/Home/Count/3
但我希望它创建localhost/Home/Count?id=3
我应该对路由进行哪些更改?这是因为新MVC项目使用的默认路由包括一个
{id}
段。从默认路由中删除该段将使现有代码生成查询字符串
更改此项:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
为此:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}", // URL with parameters
new { controller = "Home", action = "Index" } // Parameter defaults
);
从默认配置中删除
{id}
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new {
controller = "Home",
action = "Index",
id = UrlParameter.Optional }
);
}
到
由于Asp.Net注册的默认(回退)路由在url模式中包含{id}
参数:
// Default
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
您生成的url遵循此回退模式({controller}/{action}/{id}
),并使用/{id}
追加您的id
您需要在默认路由之前注册自定义路由,以排除{id}
:
routes.MapRoute(
name: "Count",
url: "Home/Count",
defaults: new { controller = "Home", action = "Count" }
);
您还可以尝试从默认模式中删除
{id}
(如果它不会影响其他操作),或者将Count
操作中的id
参数更改为其他名称。是默认路由中的“id”参数告诉mvc这样创建url。您可以使用“id”以外的其他名称,或者更改路由以期望使用不同名称的参数。只是出于好奇:您为什么要这样做?我的客户想要那种链接。好吧,不管客户想要什么。。。但在我看来,这似乎是倒退。MVC使URL更易于用户和SEO友好,而查询字符串则不然。
routes.MapRoute(
name: "Count",
url: "Home/Count",
defaults: new { controller = "Home", action = "Count" }
);