MVC: отдельные административные контроллеры - PullRequest
1 голос
/ 18 ноября 2009

Я бродил, если есть возможность сделать следующее

Если я позвоню «admin / Category» - для вызова «CategoryAdminController» Если я позвоню «Категория» - для вызова «КатегорияКонтроллер»

Это очень легко сделать через фабрику маршрутизации и пользовательских контроллеров. Вот решение:

// add route
routes.Add(new Route("{culture}/admin/{controller}/{action}/{*id}", new MvcRouteHandler())
            {
                Defaults = new RouteValueDictionary(new { controller = "Home", action = "Index", id = "", culture = LocalizationManager.DefaultCulture.Name, controllerSufix = "Admin" }),
                Constraints = new RouteValueDictionary(new { culture = new CultureRouteConstraint() })
            });

Чем создать собственный фабричный контроллер

public class CmsControllerFactory : DefaultControllerFactory
    {
        RequestContext _requestContext;

        protected override Type GetControllerType(string controllerName)
        {
            if (_requestContext.RouteData.Values.ContainsKey("controllerSufix"))
            {
                string sufix = (string)_requestContext.RouteData.Values["controllerSufix"];
                Type type = base.GetControllerType(String.Concat(controllerName, sufix));
                if (type != null)
                    return type;
            }
            return base.GetControllerType(controllerName);
        }

 public override IController CreateController(RequestContext requestContext, string controllerName)
        {
            _requestContext = requestContext;
            return base.CreateController(requestContext, controllerName);

}
}

Я бы хотел, чтобы кто-нибудь знал другое / лучшее решение.

1 Ответ

2 голосов
/ 18 ноября 2009

Вы можете сделать это довольно просто с помощью двух обработчиков маршрута:

routes.MapRoute(
   "Admin",                                              
   "/admin/category/{id}",                           
   new { controller = "CategoryAdminController", action = "Index", id = "" }
);

и затем:

routes.MapRoute(
   "Standard",                                              
   "/category/{id}",                           
   new { controller = "CategoryController", action = "Index", id = "" }
 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...