wil*_*lvv 53 url model-view-controller asp.net-mvc routing
我在这里已经多次看到过这个问题,但是没有一个问题可以接受:
ASP.NET MVC @ Url.Action包括当前路由数据
ASP.NET MVC隐式添加路由值
基本上我有一个名为Group的动作方法的Controller,它有一个不接收参数的重载并显示一个元素列表,另一个接收一个id并显示该组的详细信息.
如果我做这样的事情:
Url.Action("Group", "Groups");
Run Code Online (Sandbox Code Playgroud)
从网站的主页面(/)它返回一个这样的网址:
"mysite.com/Groups/Group"
Run Code Online (Sandbox Code Playgroud)
没关系现在,如果站点的当前地址是/ Groups/Group/1并且我调用相同的方法
Url.Action("Group", "Groups");
Run Code Online (Sandbox Code Playgroud)
返回的网址是这样的:
"mysite.com/Groups/Group/1"
Run Code Online (Sandbox Code Playgroud)
它会在生成URL时自动为当前页面添加路由值.即使我这样生成URL:
Url.Action("Group", "Groups", null);
Run Code Online (Sandbox Code Playgroud)
因此,明确指定我不想要任何路由值,生成的URL是相同的.要获取我想要的地址,我必须将路由值显式设置为空字符串,如下所示:
Url.Action("Group", "Groups", new {id=""});
Run Code Online (Sandbox Code Playgroud)
这将生成以下URL:
"mysite.com/Groups/Group"
Run Code Online (Sandbox Code Playgroud)
我的问题是,为什么会发生这种情况?如果我没有设置任何路由值,则不应将它们添加到生成的URL中.
obj*_*box 50
如果您没有明确设置它们,Url.Action将重用当前请求参数.它是出站网址匹配算法的设计.在生成url的过程中查找路径数据参数时,参数取自:
1)明确提供的值
2)来自当前请求的值
3)默认值
按照我上面指定的顺序.
路由的出站匹配算法很复杂,因此最好为请求显式设置所有参数,就像在示例中所做的那样
| 归档时间: |
|
| 查看次数: |
31286 次 |
| 最近记录: |