我在 SO 中多次看到这个问题,但没有一个给出任何可接受的答案:
ASP.NET MVC @Url.Action includes current route data
ASP.NET MVC implicitly adds route values
基本上,我有一个带有名为 Group 的操作方法的 Controller ,它有一个重载,不接收参数并显示元素列表,另一个重载接收 id 并显示该组的详细信息。
如果我做这样的事情:
Url.Action("Group", "Groups");
从网站的主页 (/) 返回一个如下所示的 url:
"mysite.com/Groups/Group"
没关系 现在,如果站点的当前地址是/Groups/Group/1 我调用相同的方法
Url.Action("Group", "Groups");
返回的url是这样的:
"mysite.com/Groups/Group/1"
生成URL时自动添加当前页面的路由值。 即使我以这种方式生成 URL:
Url.Action("Group", "Groups", null);
因此明确指定我不需要任何路由值,生成的 URL 是相同的。 要获取我想要的地址,我必须显式地将路由值设置为空字符串,如下所示:
Url.Action("Group", "Groups", new {id=""});
这将生成以下网址:
"mysite.com/Groups/Group"
我的问题是,为什么会发生这种情况?如果我没有设置任何路由值,则不应将它们添加到生成的 URL 中。
最佳答案
如果您没有显式设置,Url.Action 将重用当前请求参数。这是由出站 url 匹配算法设计的。在生成url的过程中查找路由数据参数时,参数取自:
1)明确提供的值
2) 当前请求的值
3) 默认值
按照我上面指定的顺序。
路由的出站匹配算法很复杂,因此最好显式设置请求的所有参数,就像您在示例中所做的那样
关于asp.net-mvc - ASP.NET MVC Url.Action 将当前路由值添加到生成的 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7133223/