少し問題があります。Framed という領域があります。このエリアにはホームコントローラーがあります。サイトのデフォルトには、ホーム コントローラーもあります。
私がこれでやろうとしているのは、IFrame に適した各コントローラー/アクションのバージョンと、通常のサイトのバージョンを用意することです。私はこれをマスター ページで行います。サイト マスターページには、フレーム バージョンとは異なる多くのコンテンツ プレース ホルダーがあります。このため、マスター ページを入れ替えることはできません。たとえば、http://example.com/Framed/Account/Indexは、外部サイトで使用するアカウント情報のみを含む非常に基本的なバージョンを表示します。 http://example.com/Account/Indexは同じデータを表示しますが、デフォルト サイト内にあります。
私の IoC コンテナーは構造マップです。それで、http ://odetocode.com/Blogs/scott/archive/2009/10/19/mvc-2-areas-and-containers.aspxとhttp://odetocode.com/Blogs/scott/archive/を見つけました2009/10/13/asp-net-mvc2-preview-2-areas-and-routes.aspx . これが私の現在のセットアップです。
構造マップ初期化
ObjectFactory.Initialize(x =>
{
x.AddRegistry(new ApplicationRegistry());
x.Scan(s =>
{
s.AssembliesFromPath(HttpRuntime.BinDirectory);
s.AddAllTypesOf<IController>()
.NameBy(type => type.Namespace + "." + type.Name.Replace("Controller", ""));
});
});
ここでデバッグ中に見つかった問題は、コントローラーが同じ名前 (HomeController) を持っているため、最初のコントローラーのみが登録され、これがデフォルトのホーム コントローラーであるということです。すべてのコントローラーが登録されるように、クリエイティブになり、名前空間を追加しました。
デフォルトルート
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { area = "", controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
new[] { "MySite.Controllers" }
);
エリアルート
context.MapRoute(
"Framed_default",
"Framed/{controller}/{action}/{id}",
new { area = "Framed", controller = "Home", action = "Index", id = UrlParameter.Optional },
new string[] { "MySite.Areas.Framed.Controllers" }
);
Phil Haackの推奨に従って、名前空間を 4 番目のパラメーターとして使用しています。
初期化の順序を証明するためだけに、アプリの開始
protected void Application_Start()
{
InitializeControllerFactory();
AreaRegistration.RegisterAllAreas();
RouteConfiguration.RegisterRoutes();
}
コントローラーファクトリー
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
IController result = null;
if (controllerType != null)
{
result = ObjectFactory.GetInstance(controllerType)
as IController;
}
return result;
}
そのため、/Home/Index を押すと、正しいコントローラー タイプが渡されます。/Framed/Home/Index をヒットすると、controllerType が null になり、コントローラーが返されないためエラーになります。
MVC が私の領域を完全に無視しているかのようです。何が起きてる?私は何を間違っていますか?