2010-05-26 122 views
4

我有多個控制器具有不同的操作(沒有「索引」操作)。我認爲「默認」操作的操作命名有所不同。 我想爲它們的名稱創建默認路由,並且只有在路由中提供了控制器名稱時,纔會執行第一個可用操作(從我的默認操作列表中)。ASP.NET MVC中的多個默認路由到不同的默認操作

因此,舉例來說,我有我所要考慮默認並希望在此爲了檢查它們的存在控制器中的下列行爲:

List() 
Draw() 
ViewSingle() 

路由應該以某種方式尋找/ {控制器}然後採取從列表中第一個可用的動作上面默認的動作,如:

/ControllerA  -> ControllerA.List() 
/ControllerB  -> ControllerB.Draw() 
/ControllerC  -> ControllerC.ViewSingle() 
/ControllerD  -> ControllerD.Draw() 
/ControllerE  -> ControllerE.List() 

這可能嗎?我試圖創建像這樣的其他默認操作,但無法使其正常工作:

routes.MapRoute("Default1", "{controller}/{action}", 
new { controller = UrlParameter.Optional, action = "List" } 

routes.MapRoute("Default2", "{controller}/{action}", 
new { controller = UrlParameter.Optional, action = "Draw" } 

routes.MapRoute("Default3", "{controller}/{action}", 
new { controller = UrlParameter.Optional, action = "ViewSingle" } 

幫助?

+0

爲什麼要這樣做? – 2010-05-26 00:43:42

回答

3

我想你對於默認路由有問題。那些控制器和操作參數是爲了約定。如果URL中有控制器名稱,它將路由到合適的控制器。索引方法也是如此。它只是提供了一個默認值。他們已經是可選的,這就是爲什麼。我想,你不需要在這裏航線:你可以嘗試把您的默認功能指數方法,它會work.Just是明確的:

public class ControllerA:Controller 
{ 
    public ActionResult Index() 
    { 
     return List(); 
    } 

    public ActionResult List() 
    { 
    //List function 
    } 
} 


public class ControllerB:Controller 
{ 
    public ActionResult Index() 
    { 
     return Draw(); 
    } 

    public ActionResult Draw() 
    { 
    //Draw function 
    } 
} 

,我認爲這是可行的。但是,如果你想要去與創建路由,您可以創建這樣的每條路線:

routes.MapRoute("Default1", "ControllerA", 
new { controller = ControllerA, action = "List" } 

注意ControllerA不在大括號,這是一個靜態文本。所以你爲每個控制器創建路由。牢記控制器命名習慣。

1

我同意Narsil。你應該寫一個常量給url。類似於控制器的名稱 - 因爲MVC無法解析這些路由,無法找出想要顯示的內容。

例如。

routes.MapRoute(null, "ControllerA/{action}", 
new { controller = "ControllerA", action = "List" } 

routes.MapRoute(null, "ControllerB/{action}", 
new { controller = "ControllerB", action = "Draw" } 

routes.MapRoute(null, "ControllerC/{action}", 
new { controller = "ControllerC", action = "ViewSingle" }