Na podstawie tego pytania here i za pomocą kodu znalezionego here Próbuję wczytać widoki, które są osadzonymi zasobami w oddzielnym projekcie DLL, a autor oryginalnego pytania mówi, że miał Sukces to robi - ale nie mogę zmusić go do działania, ponieważ wygląda na to, że silnik widoku MVC przechwytuje żądanie i wciąż patrzy na system plików dla widoku. Wyjątek:Używanie programu VirtualPathProvider do ładowania widoków MVC ASP.NET z bibliotek DLL
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
Używam CustomViewEngine
, jak struktura jednego Rob Connery/app następująco:
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;
}
}
Oto moje trasy:
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" });
w moim AssemblyResourceProvider
jestem sprawdzanie, czy ścieżka rozpoczyna się od ~/plugin/
, a następnie użycie konwencji nazw pliku DLL plugin.{controller}.dll
Jakieś sugestie?
UPDATE: Do czasu kierowany wniosek o powiedzmy http://localhost/plugin/admin
jest dotarcie do VirtualFileProvider nie ma żadnego widoku załączony na końcu. Tak więc w metodzie Open metody VirtualFileProvider
jest przekazywana wirtualna ścieżka ~/plugin/admin
, gdy powinna być ~/plugin/admin/Index.aspx
zdefiniowana na powyższej trasie. Czy zawiodłem moje trasy lub czy mam rację, oczekując, że tak się stanie?
że najpierw FileExists nazywają się dzieje przed kontroler działa i musi zwrócić wartość false lub program IIS spróbuje podać go jako plik statyczny. Żądanie faktycznego pliku aspx pojawia się później, gdy kontroler zażąda wyświetlenia. –