Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc MVC Routing Html.ActionLink使用?id=1而不是/id创建URL_Asp.net Mvc_Url_Asp.net Mvc Routing - Fatal编程技术网

Asp.net mvc MVC Routing Html.ActionLink使用?id=1而不是/id创建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()时,创建的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

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 }
            );