在我的mvc3 razor项目中,我有行动链接
@Html.ActionLink("ActionLinkName","Count","Home",new{id = 3})
这会生成localhost/Home/Count/3
但我希望它能够创建localhost/Home/Count?id=3
我应该在路线上做出哪些改变?
答案 0 :(得分:2)
这是因为新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
);
答案 1 :(得分:1)
由于Asp.Net注册的默认(回退)路由在url模式中包含{id}
参数:
// Default
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
您生成的网址遵循此后备模式({controller}/{action}/{id}
)并使用id
附加您的/{id}
。
您需要在默认路线之前注册自定义路线以排除{id}
:
routes.MapRoute(
name: "Count",
url: "Home/Count",
defaults: new { controller = "Home", action = "Count" }
);
您还可以尝试从默认模式中移除{id}
(如果它不会影响其他操作)或将id
操作中的Count
参数更改为不同的名字。
答案 2 :(得分:0)
从默认配置中删除{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 }
);
}
要
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}",
defaults: new {
controller = "Home",
action = "Index" }
);
}