0

モジュールをサポートする必要がある mvc3 プロジェクトに取り組んでいます。たとえば、MVC3 コア プロジェクトと MVC3 モジュール プロジェクト (MyModule) があります。

ここで、コア プロジェクトの MVC3 モジュール プロジェクトからビューを読み込んで表示したいと考えています。カスタムの VirtualPathProvider クラスと、コア プロジェクト以外の場所からビューをフェッチする VirtualFile クラスを作成しました。

どういうわけか、次のエラーが表示されます。CS0103: The name 'ViewBag' does not exist in the current context.

私がやっていることは、コア プロジェクトの AssemblyInfo クラスで次のコード行を使用して、コア プロジェクトのモジュール プロジェクトからアセンブリをロードすることです。

[assembly: PreApplicationStartMethod(typeof(ModuleLoader), "Init")]

ModuleLoader クラスは DLL をフェッチしBuildManager.AddReferencedAssembly、アセンブリを追加するために使用します。

に移動して、MyModuleController.cs のアクション メソッドを呼び出すことができるようになりましたhttp://localhost/MyModule。MyModuleController.cs の Index ActionResult メソッドで、次のようなビューを返します。

return View("~/Modules/MyModule/Index.cshtml");

VirtualPathProvider は、パスが ~/Modules/ で始まるかどうかを確認し、モジュール プロジェクトからビュー (MyModule -> Views -> Index.cshtml) を取得します。

今、エラーを検索し、欠落している Web.config ファイルについて読みましたが、完全な MVC3 Web プロジェクトであるため、モジュール プロジェクトにすべてが含まれています。

アセンブリからの埋め込みビューの読み込みについてよく読みましたが、上記で説明したことは可能ですか?

前もって感謝します!

編集:

Griffin-MvcContrib 方式を採用し、そのプラグイン システムを使用することにしました。これは、私が必要とするすべてのものを提供しているように見えます。さらに、Autofac を使用しています。

Griffin.MvcContrib - プラグイン システム

4

1 に答える 1

1

カスタムVirtualPathProviderを使用してへの参照を追加することBuildManagerは、ソリューションの一部にすぎません。また、ビューを変更し、DLL 内のすべてのビューに使用するレイアウトを指定する必要があります。

@inherits次に、ビューの代わりに使用する必要もあり@modelます。

または、すべてを処理する Griffin.MvcContrib を使用することもできます: http://blog.gauffin.org/2012/05/griffin-mvccontrib-the-plugin-system/

于 2012-10-22T13:04:08.380 に答える