比方说,我只有这条路:瞄准在其他控制器相同的操作方法生成传出URL
routes.MapRoute("MyRoute", "{controller}/{action}/{id}",
new
{
controller = "Home",
action = "Index",
id = UrlParameter.Optional
});
我们可以看到,我们的启动页面将Home/Index
。
而且我们说,我已经创建的视图使用此代码锚元素:
@Html.ActionLink("This targets another controller","Index", "Admin")
当我渲染视图,你会看到生成以下HTML:
<a href="/Admin">This targets another controller</a>
我们的要求对于以Admin
控制器上的Index
操作方法为目标的URL,已通过ActionLink
方法表示为/Admin
。路由系统非常聪明,它知道应用程序中定义的路由默认使用Index
操作方法,允许它省略不需要的段。
,问题是:
如果我改变的路线:
routes.MapRoute("MyRoute", "{controller}/{action}/{id}/{name}",
new
{
controller = "Home",
action = "Index",
id = UrlParameter.Optional,
name = UrlParameter.Optional
});
或为:
routes.MapRoute("Default", "{controller}/{action}/{id}/{*catchall}",
new
{
controller = "Home",
action = "Index",
id = UrlParameter.Optional
});
接着,下面的HTML将生成:
<a href="/Admin/Index">This targets another controller</a>
你能解释一下我为什么?
我会认为这条路线会有问题。有两个模式段是可选的,除非你有'/ Admin/Index // 4',否则'/ Admin/Index/4'的意思是id = 4或者name = 4是不确定的。 – Tejs 2015-02-05 17:43:56
您是否在项目中使用区域? – NightOwl888 2015-02-05 19:39:26
只有最后一个参数可以是可选的。 – 2015-02-06 02:24:24