2013-05-12 65 views
0

單獨的控制器的名字,我有一些控制器類如:定製MVC路線 - 在地址段

AdminProductController 
AdminOrderController 
AdminMessageController 

等。每個控制器類封裝與特定主題有關的管理相關任務。 我想,當用戶輸入這樣的URL:

Admin/Product/M1 

AdminProductM1操作方法調用。

當然

一個方法是:

routes.MapRoute("AdminProduct", "Admin/Product/{action}", new { controller = "AdminProduct", action = "Index" }); 

上面代碼的問題是每個控制器類必須聲明上面的代碼。 我想要一個通用的方法來實現這一點。有沒有解決方法?

+1

您是否考慮過使用區域? – 2013-05-12 14:07:52

+0

如果可能,請重新創建控制器並將其重命名爲ie。 'Adminproduct'到'Product',然後你可以簡單地做到這一點; 'routes.MapRoute(「AdminProduct」,「Admin/{controller}/{action}」,new {action =「Index」});' – 2013-05-12 15:53:20

回答

0

您需要創建自定義路線。

public class AdminRoute : Route 
{ 
public AdminRoute(string url, IRouteHandler routeHandler) 
    : base(url, routeHandler) {} 
public AdminRoute(string url, RouteValueDictionary defaults, 
    IRouteHandler routeHandler) : base(url, defaults, routeHandler) {} 
public AdminRoute(string url, RouteValueDictionary defaults, 
    RouteValueDictionary constraints, IRouteHandler routeHandler) 
    : base(url, defaults, constraints, routeHandler){} 
public AdminRoute(string url, RouteValueDictionary defaults, 
    RouteValueDictionary constraints, RouteValueDictionary dataTokens, 
    IRouteHandler routeHandler) 
    : base(url, defaults, constraints, dataTokens, routeHandler){} 

    public override RouteData GetRouteData(HttpContextBase httpContext) 
    { 
     RouteData data = base.GetRouteData(httpContext); 

     if (data != null) 
      data.Values["controller"] = "Admin" + data.Values["controller"]; 

     return data; 
    } 
} 
public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.Add(new AdminRoute("Admin/{controller}/{action}/{id}", 
      new RouteValueDictionary(
       new { controller = "Home", action="Index", 
       id = UrlParameter.Optional }), new MvcRouteHandler())); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { 
       controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
} 
+0

謝謝,但我有編譯錯誤: 「name'controller '在當前上下文中不存在' – 2013-05-13 03:08:14

+0

@MostafaAsgari - 檢查更新。 – 2013-05-13 05:49:27

+0

謝謝...那就是...你救了我的一天:) – 2013-05-13 09:55:40