2010-08-04 146 views
3

默認路由工作正常asp.net的MVC路由問題

mysite.com/home/about

,我甚至看到如何自定義它,使之更短

所以我可以說:

mysite.com/edit/1 而不是 mysite.com/home/edit/1

,但我怎麼可以讓它更長的時間來HANDL像下面

mysite.com/admin/user/1ËURL //工作

mysite.com/admin/user/details //不起作用

mysite.com/admin/question /創建//不起作用

我不能只把ID作爲一個動作?我需要一個自定義路線?

做我需要爲每個表中創建新的控制器或我可以路線他們都通過管理控制器

非常感謝

+0

它像我想要一個控制器「管理員」和兩個動作「用戶」和「刪除」 – 2010-08-04 19:40:33

+0

較長的路線必須是前短路線。發佈您的路由代碼。 – 2010-08-04 19:41:52

+0

對不起,我還沒有它......只是想知道如何使更改默認處理這個謝謝 – 2010-08-04 19:46:52

回答

2

Areas功能

可以實現這種類型的路由,而不領域,但作爲控制器的數量變大網站的可維護性會減弱。本質上,你所做的是將控制器名稱硬編碼到路由定義中,這意味着你必須爲每個新的管理控制器添加新的路由映射。以下是您可能想要設置不帶區域的路線的幾個示例。

routes.MapRoute("AdminQuestions", // Route name 
       "admin/question/{action}/{id}", // URL with parameters 
       new { controller = "AdminQuestion", action = "Index" } // Parameter defaults 
    ); 

routes.MapRoute("AdminUsers", // Route name 
       "admin/user/{action}/{id}", // URL with parameters 
       new { controller = "AdminUser", action = "Index" } // Parameter defaults 
    ); 

或者,您也可以通過管理控制器路線的一切,但它很快就會變得非常混亂與您的控制器操作執行多個角色。

routes.MapRoute("Admin", // Route name 
       "admin/{action}/{type}/{id}", // URL with parameters 
       new { controller = "Admin", action = "Index" } // Parameter defaults 
    ); 

與您AdminController行動(S)看起來像:

public virtual ActionResult Create(string type, int id) 
{ 
    switch (type) 
    { 
     case 'question': 
      // switch/case is code smell 
      break; 
     case 'user': 
      // switch/case is code smell 
      break; 
     // etc 
    } 
} 
1

添加路線Global.asax中是相當簡單的。將更具體的路線放在更一般的路線之上。最典型的模式是控制器/動作/參數/參數...如果您需要更復雜的東西,您可能需要查看MVC區域。在上例中,「mysite.com/admin/user/details」正在尋找控制器命名爲「管理員」和行動命名爲「用戶」,與如已經提到的,可能是你最好的選擇將是使用新的一切的行動方法是參數後(假設一個典型的路線設置)

+0

亞,但也需要一個參數以及delails mysite.com/admin/user/details/23 也許我需要一個每個表的新控制器 – 2010-08-04 21:22:44

+0

控制器是類。動作是關於(如此相關)這些類的方法。這就是你應該如何建模你的應用程序。路線可以任何你需要的方式配置。這聽起來像你可能想要在mvc中查找「區域」。 – ThatSteveGuy 2010-08-04 23:40:01