この質問に基づいて ここ および見つかったコードを使用して ここ 別のDLLプロジェクトに埋め込まれたリソースであるビューをロードしようとしています、元の質問の作者は、これは成功したと言っていますが、MVCビューエンジンがリクエストをインターセプトし、ビューのファイルシステムをまだ見ているように見えるので、私はそれを機能させることができません。例外:
Server Error in '/' Application.
The view 'Index' or its master could not be found. The following locations were searched:
~/Views/admin/Index.aspx
~/Views/admin/Index.ascx
~/Views/Shared/Index.aspx
~/Views/Shared/Index.ascx
~/App/Views/admin/Index.aspx
~/App/Views/admin/Index.ascx
~/App/Views/Shared/Index.aspx
~/App/Views/Shared/Index.ascx
次のように、Rob Conneryの/ App構造体のようなCustomViewEngine
を使用しています。
public class CustomViewEngine : WebFormViewEngine
{
public CustomViewEngine()
{
MasterLocationFormats = new[] {
"~/App/Views/{1}/{0}.master",
"~/App/Views/Shared/{0}.master"
};
ViewLocationFormats = new[] {
"~/App/Views/{1}/{0}.aspx",
"~/App/Views/{1}/{0}.ascx",
"~/App/Views/Shared/{0}.aspx",
"~/App/Views/Shared/{0}.ascx"
};
PartialViewLocationFormats = ViewLocationFormats;
}
}
これが私のルートです:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("Home", "", new {controller = "Page", action = "Index", id = "Default"});
routes.MapRoute("Default", "Page/{id}", new { controller = "Page", action = "Index", id = "" });
routes.MapRoute("Plugins", "plugin/{controller}/{action}", new { controller = "", action = "Index", id = "" });
routes.MapRoute("Error", "{*url}", new { controller = "Error", action = "ResourceNotFound404" });
私の AssemblyResourceProvider
パスが~/plugin/
で始まるかどうかを確認し、dllファイル名の規則plugin.{controller}.dll
を使用しています
助言がありますか?
UPDATE:たとえばhttp://localhost/plugin/admin
のルーティングされたリクエストがVirtualFileProviderに到達するまでには、最後にビューがアタッチされていません。したがって、VirtualFileProvider
のOpenメソッドでは、上記のルートで定義されている~/plugin/admin
であるはずのときに、~/plugin/admin/Index.aspx
の仮想パスが渡されています。私は自分のルートを台無しにしたか、またはこれが起こることを期待する権利がありますか?
Global.asax
_ _Application_Start
_ハンドラー内でVirtualPathProvider
を登録する必要があります。return View("~/Plugin/YOURDLL.dll/FULLNAME_YOUR_VIEW.aspx");
これを示すダウンロード可能なコードサンプルの記事は次のとおりです。
組み込みのWebFormsViewEngineはVirtualPathProvidersを使用するため、VPPを記述して登録する場合、ビューエンジンに変更を加える必要はありません。