2011-09-23 38 views
3

我有三個具體路線:如何將所有內容重定向到單個控制器?

routes.MapRoute(
     "Home Page", 
     "", 
     new { controller = "Home", action = "Index" } 
     ); 

    routes.MapRoute(
     "Admin Section", 
     "AdminSection/{action}/{id}", 
     new { controller = "AdminSection", action = "Index", id = UrlParameter.Optional } 
     ); 

    routes.MapRoute(
     "Listings", 
     "{controller}/{action}/{id}", 
     new { controller = "Listings", action = "Index", id = UrlParameter.Optional } 
     ); 

基本上,第一兩條路線按計劃工作,但是,我想要的一切,是不是特別的路線被重定向到listings控制器。

我還是很新的路由和一直試圖谷歌在過去一小時沒有任何的運氣 - 我確切地知道是怎麼回事,但是,我不知道如何解決它。

我已經使用了RouteDebugger,並且我可以看到它正在觸及路線,但問題是,如果未指定控制器,它將只會轉到Listings控制器 - 但顯然這裏總會有東西存在。

我嘗試了幾種不同的組合 - 我以爲我是通過刪除網址的{controller}部分並仍然定義默認值來贏得勝利,但是我沒有太多運氣。

有人知道我需要做什麼嗎?

回答

4

如何:

routes.MapRoute("Listings", "{action}/{id}", 
     new { controller = "Listings", action = "Index", id = UrlParameter.Optional }); 

site.com/test:

它會去action: testcontroller: listingid = blank

enter image description here

+0

再一次,我覺得自己像一個白癡 - 這正是我想要做的,但是,我在'新{...}'部分犯了一個錯誤,我沒有看到,直到我複製你的例子對此非常感謝。 – Wil

3

編輯:據我瞭解,你想一個包羅萬象的路線。

http://richarddingwall.name/2008/08/09/three-common-aspnet-mvc-url-routing-issues/

routes.MapRoute("Listings", "{*url}", 
    new { controller = "Listings", action = "Index" } 
); 

原文:

我不能在此刻測試這一點,但

routes.MapRoute(
    "Listings", 
    "{anythingOtherThanController}/{action}/{id}", 
    new { controller = "Listings", action = "Index", id = UrlParameter.Optional } 
    ); 

這應該工作。

在您的房源控制器,只接受一個字符串參數「anythingOtherThanController」,它會得到綁定到它。

這裏的主要問題是:/一些/動作將映射到相同的動作/其它/動作。所以我不確定你要在這裏做什麼:)

+0

+1所有的幫助和當我有更多時間時,我會閱讀那個(有趣的)鏈接...但是,當我嘗試它時,我接受了一個答案,它確實是我想要的。 – Wil

+0

沒有probs。只要它解決了你的問題。抱歉,我無法理解你的要求:)儘管如此,以防萬一。 –

1

提供默認路由並提供控制器名稱作爲列表控制器。將此路由映射保留在所有映射的底部。

routes.MapRoute(
    "Default", 
    "{controller}/{action}/{id}", 
    new { controller = "Listings", action = "Index", id = UrlParameter.Optional } 
    ); 

對不起,我得到了序列混合。

+0

這不起作用 - 我已經嘗試過了......如果我想要一個「http://網站」的網址。com/bla「 - 這將試圖加載bla控制器的默認動作索引....我需要它加載列表動作的默認控制器(當我說試試看,我的意思是降低如果它是第一個,它會毀了其他路線) – Wil

+0

這將捕獲一切,包括AdminSection,不是嗎? –

+0

我懷疑如果你這樣做,並且有人在adminsection/whatever中輸入,將不會進入adminsection路由,而是這個默認路由將嘗試並執行它 – jzm

相關問題