当我使用 Html.ActionLink() 时,创建的 URL 不是所需的格式:
Html.ActionLink(Model.ProductCode, "Update", new { id = Model.ProductId })
制作这个网址
/Update?id=1
当我想要这个 URL 时:
/Update/1
哪些路由选项会创建第二个 URL?这是我们首选的 URL 样式。
两个 URL 都有效并显示正确的页面 - 但是我们只想使用/id
在 Global.asax 中,MVC 默认路由处理两个 URL
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" }); // Parameter defaults
最佳答案
我可以通过创建一个关于我的默认路由的路由来复制这个问题,该路由仍然与一般模式相匹配。例子:
routes.MapRoute(
"Default2", // Route name
"{controller}/{action}", // URL with parameters
new { controller = "Home", action = "Index"} // Parameter defaults
);
当放置在我的默认路由之上时,我的 URL 中会出现 ?id=1 。您能否确认此 ActionLink 不匹配您期望它匹配的路由之上的任何路由?
编辑:以下内容不会影响 URL
但是,在其他情况下使用 UrlParameter.Optional 仍然是有利的。除非暴民统治另有规定,否则为繁荣而离开。
new UrlParameter.Optional value. If you set the default value for a URL parameter to this special value, MVC makes sure to remove that key from the route value dictionary so that it doesn’t exist.
我认为您需要稍微调整路线。将 id = ""更改为 id = UrlParameter.Optional
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional });
这就是我们用于默认路由的方式,您正在寻找的行为就是我们的应用程序的行为方式。
关于asp.net-mvc - MVC 路由 Html.ActionLink 使用 ?id=1 而不是/id 创建 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8721389/