我的目标是通过控制器的名称和区域来查找控制器。如果我的当前httpContext
与要查找的控制器处于相同的区域,则我已经成功完成了此操作。然而,我无法让我的ControllerFactory
调用考虑到区域。以下是我的代码:
public static ControllerBase GetControllerByName(this HtmlHelper htmlHelper, string controllerName)
{
IControllerFactory factory = ControllerBuilder.Current.GetControllerFactory();
IController controller = factory.CreateController(htmlHelper.ViewContext.RequestContext, controllerName);
if (controller == null)
{
throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, "The IControllerFactory '{0}' did not return a controller for the name '{1}'.", factory.GetType(), controllerName));
}
return (ControllerBase)controller;
}
由于它将RequestContext
作为参数,因此我已添加了一个名为"area"的路由值,但没有任何变化。是否可以通过requestContext做些什么以考虑区域?我需要重写控制器工厂吗?如果需要,特别是哪个处理区域区分?
更新:
以下是我的AreaRegistration示例:
public class StoresAreaRegistration : AreaRegistration
{
public override string AreaName { get { return "Stores"; } }
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
AreaName,
AreaName + "/{controller}/{action}/{id}",
new { area = AreaName, controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
RequestContext.RouteData
吗? - cheesemacflyhtmlHelper.ViewContext.RequestContext.RouteData.DataTokens["area"] = areaName
和htmlHelper.ViewContext.RequestContext.RouteData.Values["area"] = areaName;
都尝试过了,但都没有成功。 - OnResolveGetControllerByName()
函数中没有访问Request.RequestContext
对象的权限? - cheesemacflyhtmlHelper.ViewContext.RequestContext
: - OnResolveGetControllerByName()
内部无法访问Request
对象? - cheesemacfly