2010-01-20 149 views
3

有沒有辦法創建一個處理所有路由的基礎控制器實現?ASP.NET MVC基礎控制器

IE/home/index和/ about/index都指向一個控制器方法,並返回視圖。

我正在建設的網站是90%的靜態內容,我不想去創建50個控制器。

一個應該沒問題?

+0

我們可以請一份10個示例路線清單,以獲得您的問題的準確示例。 2條路線是不夠的。 – 2011-05-03 01:31:29

回答

1

請記住,「控制器」和「行動」是路由系統的關鍵詞,以實現它的動態魔術。如果您只需使用其他參數名稱替換路由中的「控制器」參數,則始終可以使用默認控制器。

routes.MapRoute("Default", 
       "{whatever}/{action}/{id}", 
       new { controller="Home", action="Index", whatever="", id="0" }); 

請注意,每個方法應該處理「無論」參數。

+0

事情是 routes.MapRoute( 「默認」,//路線名稱 「{控制器}/{行動} /(編號)」,// URL與參數 新{控制器= 「基地」,動作=「 Index「,id =」「} //參數默認值 ); 這些都擊中了BaseController,但像「/ site-faq/banking-faq這樣的路線不會被擊中 – john 2010-01-20 07:14:49

+0

難道你不能只是定義更多的路線來捕捉它們嗎?/ {whatever}/{action}。/ {whatever}/{動作}/stuff/{morestuff *}。請記住,你應該把你的路線從最具體到最不具體。 – womp 2010-01-20 07:19:48

+0

routes.MapRoute( 「排行榜」, 「網站促銷/網站領導板」, 新{控制器=「Base」,action =「Index」} );。 但是當我點擊/ site-promotions/site-leader-board時,它從不碰到基礎控制器的索引方法 – john 2010-01-20 07:27:03

0

你的global.asax文件中有正確的路由,你可以這樣做。但是,重構或任何原因之後,您將很難管理網站。這裏是學習路由在asp .net mvc:http://www.asp.net/learn/mvc/#MVC_Routing

0

因爲你不打算映射到基於URL的控制器或方法,你只需要捕獲幾個參數,然後對它們做些什麼。

routes.MapRoute( 
    "MyNewRoute", 
    "{firstParameter}/{secondParameter}", 
    new {controller="Home", action="Index"} 
); 

public ActionResult Index(string firstParameter, string SecondParameter) 
{ 
    if (firstParameter == "Home") 
    { 
     // Do something 
    } 
} 
+0

我認爲「 - 」正在打破路線 – john 2010-01-20 07:30:14

1

我明白你希望保持簡單的願望,但根據我的經驗,你總是期望某種程度的變化。如果我是你的情況,我會做這樣的事情:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return RedirectToAction("Index", new { controller = "Main" }); 
    } 
} 

public class AboutController : Controller 
{ 
    public ActionResult Index() 
    { 
     return RedirectToAction("Index", new { controller = "Main" }); 
    } 
} 

public class MainController : Controller 
{ 
    public ActionResult Index() 
    { 
     // Do something important. 
     // Do something else important. 
     return View(); 
    } 
} 

要創建AboutController,我只是複製了HomeController中,改變了類名AboutController。通過這種方式,您可以儘量減少路由維護工作,集中您想要集中的行爲,並且仍然允許自己適應不斷變化的需求,而無需撤銷很多解決方法。如果經過一段時間後,您必須更改特定操作的行爲,那麼您只需轉到該操作並更改代碼即可。