比方說,我只有這條路:瞄準在其他控制器相同的操作方法生成傳出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