ActionLink 显示查询字符串而不是 URL 参数
ActionLink is showing query string instead of URL parameters
我的问题与其他问题非常相似。在 MVC .Net 4.5 中使用 ActionLink 时,我得到一个参数的查询字符串,而不仅仅是 URL 路径。我尝试了解决方案 HERE,但它没有用。
代码-
里面 RouteConfig.cs -
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "MyControllerRoute",
url: "{controller}/{action}/{id}/{description}",
defaults: new { controller = "MyController", action = "MyAction", id = UrlParameter.Optional, description = UrlParameter.Optional }
);
里面HomeController.cs-
public ActionResult Index(){
--do stuff--
return View();
}
里面MyController.cs-
public ActionResult Vote(int id, string description){
--do stuff--
return View();
}
里面Index.cshtml
@Html.ActionLink(
"This is stuff",
"MyAction",
"MyController",
new { id = 123, description = "This-is-stuff" },
null)
得到这个结果 -(不是我想要的)
<a href="/MyController/MyAction/123?description=This-is-stuff">This is stuff</a>
想要的结果 -(我怎样才能得到这个?)
<a href="/MyController/MyAction/123/This-is-stuff">This is stuff</a>
您需要调换路线的顺序。我还建议您在 url 定义中使用控制器名称(以及可选的操作名称),以防止与其他路由可能发生冲突。此外,只有最后一个参数可以标记为 UrlParameter.Optional
(否则如果只提供一个参数,路由将被忽略并且 url 将恢复为使用查询字符串值)。您的定义应该是(按顺序)
routes.MapRoute(
name: "MyControllerRoute",
url: "MyController/MyAction/{id}/{description}",
defaults: new { controller = "MyController", action = "MyAction" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
我的问题与其他问题非常相似。在 MVC .Net 4.5 中使用 ActionLink 时,我得到一个参数的查询字符串,而不仅仅是 URL 路径。我尝试了解决方案 HERE,但它没有用。
代码-
里面 RouteConfig.cs -
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "MyControllerRoute",
url: "{controller}/{action}/{id}/{description}",
defaults: new { controller = "MyController", action = "MyAction", id = UrlParameter.Optional, description = UrlParameter.Optional }
);
里面HomeController.cs-
public ActionResult Index(){
--do stuff--
return View();
}
里面MyController.cs-
public ActionResult Vote(int id, string description){
--do stuff--
return View();
}
里面Index.cshtml
@Html.ActionLink(
"This is stuff",
"MyAction",
"MyController",
new { id = 123, description = "This-is-stuff" },
null)
得到这个结果 -(不是我想要的)
<a href="/MyController/MyAction/123?description=This-is-stuff">This is stuff</a>
想要的结果 -(我怎样才能得到这个?)
<a href="/MyController/MyAction/123/This-is-stuff">This is stuff</a>
您需要调换路线的顺序。我还建议您在 url 定义中使用控制器名称(以及可选的操作名称),以防止与其他路由可能发生冲突。此外,只有最后一个参数可以标记为 UrlParameter.Optional
(否则如果只提供一个参数,路由将被忽略并且 url 将恢复为使用查询字符串值)。您的定义应该是(按顺序)
routes.MapRoute(
name: "MyControllerRoute",
url: "MyController/MyAction/{id}/{description}",
defaults: new { controller = "MyController", action = "MyAction" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);