我的目标是从它的名称和区域中找到一个控制器。如果我的电流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;
}
由于它采用 aRequestContext
作为参数,因此我向其添加了“区域”的路由值,但没有任何变化。我可以用 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 }
);
}
}