Basierend auf dieser Frage here und mit Code gefunden here Ich versuche, Ansichten, die eingebettete Ressourcen in einem separaten DLL-Projekt geladen sind, und der ursprüngliche Frage der Autor sagt er hatte Erfolg dabei - aber ich kann es nicht zum Funktionieren bringen, da es scheint, dass die MVC-View-Engine die Anfrage abfängt und immer noch auf das Dateisystem für die Ansicht schaut. Ausnahme:Verwenden von VirtualPathProvider zum Laden von ASP.NET MVC Ansichten von DLLs
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
ich CustomViewEngine
verwende, wie Rob Connery/App-Struktur ein, wie folgt:
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;
}
}
Hier sind meine Routen:
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" });
In meinem AssemblyResourceProvider
ich bin Überprüfen, um zu sehen, ob der Pfad ~/plugin/
beginnt und dann die DLL-Dateiname-Konvention verwendet plugin.{controller}.dll
Irgendwelche Vorschläge?
UPDATE: Durch die Zeit, der geroutet Antrag auf etwa http://localhost/plugin/admin
wird den VirtualFileProvider bekommt es keine Aussicht am Ende befestigt hat. Also wird in der VirtualFileProvider
Open-Methode der virtuelle Pfad von ~/plugin/admin
übergeben, wenn es ~/plugin/admin/Index.aspx
sein sollte, wie in meiner Route oben definiert. Habe ich meine Routen durcheinander gebracht oder rechne ich damit, dass dies passiert?
Das erste FileExists nennen vor Der Controller wird ausgeführt und muss false zurückgeben, oder IIS versucht, ihn als statische Dateien bereitzustellen. Die Anforderung für die tatsächliche aspx-Datei kommt später, wenn der Controller eine Ansicht anfordert. –