Asp.net mvc MVC Routing Html.ActionLink使用?id=1而不是/id创建URL
使用Html.ActionLink()时,创建的URL不是所需的格式:Asp.net mvc MVC Routing Html.ActionLink使用?id=1而不是/id创建URL,asp.net-mvc,url,asp.net-mvc-routing,Asp.net Mvc,Url,Asp.net Mvc Routing,使用Html.ActionLink()时,创建的URL不是所需的格式: Html.ActionLink(Model.ProductCode, "Update", new { id = Model.ProductId }) 创建此URL /Update?id=1 当我想要此URL时: /Update/1 哪些路由选项创建第二个URL?这是我们首选的URL样式 两个URL都可以工作,并且显示正确的页面-但是我们只想使用/id 在Global.asax中,MVC默认路由处理两个URL route
Html.ActionLink(Model.ProductCode, "Update", new { id = Model.ProductId })
创建此URL
/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
但是,在其他场景中使用urlparmeter.Optional仍然是有利的。除非暴民统治另有规定,否则要走向繁荣
新URL参数。可选值。如果设置了
如果将URL参数设置为此特殊值,MVC将确保删除该键
从路由值字典中删除,使其不存在
我想你需要稍微调整一下你的路线。将id=”“更改为id=urlparmeter。可选
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional });
这是我们用于默认路由的内容,您要查找的行为是我们的应用程序的行为方式。请参阅
您使用的是哪个版本的MVC?如果您使用的是MVC3,则需要在对
Html.ActionLink()
的调用中添加第四个参数,传入一个null
,我刚刚偶然发现了这一点并决定回答。事实证明,Url.Action()和Html.ActionLink()都使用路由集合中的第一个路由来格式化生成的Url。因此,RegisterRoutes()中的第一个映射路由应该是:
routes.MapRoute(
name: "Default",
url: "{controller}/{id}/{action}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
而不是“{controller}/{action}/{id}”。路由名称(即“默认”)并不重要,只有顺序才重要您是否有与之匹配的路由?能否在global.asax中发布路由?这两个路由当前都有效。我只是希望ActionLink以我们喜欢的格式生成URL。只是为了确保。。。控制器操作是否正在检查名为“id”的参数?@JK Global.asax文件中的路由声明可能存在一些问题。你能发布Global.asax文件的内容以便我们进一步调查吗?JK-我刚刚验证了我自己,看看我是否能让我的MVC应用程序创建一个新的?使用URL。在您的默认路线之上是否还有其他MVC可以匹配的路线?是否可以查看您的整个路线表?
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);