私の目標は、名前とエリアからコントローラーを見つけることです。私の現在httpContext
が発見されるべきコントローラと同じエリア内にある場合、私はこれを成功させました。ただし、ControllerFactory
Area を考慮に入れるために を呼び出すことができません。これが私のコードです:
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 でできることはありますか? コントローラ ファクトリをオーバーライドする必要がありますか? もしそうなら、特に Area の区別を処理するものは何ですか?
アップデート:
これが私が持っている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 }
);
}
}