Dựa trên câu hỏi này here và sử dụng mã được tìm thấy here Tôi đang cố gắng tải chế độ xem được nhúng tài nguyên trong một dự án DLL riêng biệt và tác giả của câu hỏi ban đầu cho biết thành công làm điều này - nhưng tôi không thể làm cho nó hoạt động vì có vẻ như công cụ xem MVC đang chặn yêu cầu và vẫn đang xem xét hệ thống tệp cho chế độ xem. Ngoại lệ:Sử dụng VirtualPathProvider để tải chế độ xem ASP.NET MVC từ các tệp 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
Tôi đang sử dụng một CustomViewEngine
, giống như một cấu trúc/App Rob Connery như sau:
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;
}
}
Dưới đây là tuyến đường của tôi:
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" });
Trong tôi AssemblyResourceProvider
Tôi kiểm tra xem đường dẫn có bắt đầu ~/plugin/
và sau đó sử dụng quy ước tên tệp dll plugin.{controller}.dll
Mọi đề xuất?
CẬP NHẬT: Vào thời điểm yêu cầu được định tuyến nói http://localhost/plugin/admin
sẽ chuyển đến VirtualFileProvider, nó không có bất kỳ Chế độ xem nào được đính kèm ở cuối. Vì vậy, trong phương thức Open của VirtualFileProvider
, đường dẫn ảo của ~/plugin/admin
đang được chuyển vào khi nó phải là ~/plugin/admin/Index.aspx
như được định nghĩa trong tuyến đường của tôi ở trên. Tôi đã làm rối tung các tuyến đường của mình hay tôi có quyền mong đợi điều này xảy ra không?
Đó FileExists đầu tiên gọi xảy ra trước bộ điều khiển chạy, và phải trả về false hoặc IIS sẽ cố gắng phục vụ nó như một tệp tĩnh. Yêu cầu cho tệp aspx thực tế đến sau, khi trình điều khiển yêu cầu một khung nhìn. –