【发布时间】:2010-12-17 19:14:56
【问题描述】:
如果可以选择执行以下操作,我正在徘徊
如果我打电话 “admin/Category” - 调用“CategoryAdminController” 如果我打电话 “Category” - 调用“CategoryController”
通过路由和自定义控制器工厂很容易做到这一点。这是解决方案:
// 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);
}
}
如果有人知道一些不同/更好的解决方案,我想知道。
【问题讨论】:
-
刚刚注意到,在这种情况下,即使我在 Category > Index 视图中调用“localhost/Category”操作链接,例如 也会插入“管理员”部分,所以我仍在寻找解决方案。
标签: asp.net-mvc routing controller