Tôi đã thiết lập một số VirtualPathProvider
và nó hoạt động tốt cho các cuộc gọi url trực tiếp như http://.../home/index
trong thanh địa chỉ.Trình trợ giúp Html không sử dụng tùy chỉnh VirtualPathProvider
public class HomeController
{
public ActionResult Index()
{
// This triggers MyVirtualPathProvider functionallity when called via
// the browsers address bar or anchor tag click for that matter.
// But it does not trigger MyVirtualPathProvider for 'in-view' calls like
// @{ Html.RenderAction("index", "home"); }
return View();
}
}
public class MyVirtualPathProvider : VirtualPathProvider
{
public override System.Web.Hosting.VirtualFile GetFile(string virtualPath)
{
// This method gets hit after the Controller call for return View(...);
if (MyCondition)
return MyVirtualFileHandler.Get(virtualPath);
return base.GetFile(virtualPath);
}
public override bool FileExists(string virtualPath)
{
// This method gets hit after the Controller call for return View(...);
if (MyCondition)
return true;
return base.FileExists(virtualPath);
}
}
Tuy nhiên, tôi sẽ như thế này để làm việc cho các helper Html quá, nhưng ngay bây giờ nó được bỏ qua VirtualPathProvider
cho các cuộc gọi html helper trong giao diện:
@{
Html.RenderAction("index", "home");
}
Có cách nào để giải quyết vấn đề?
Ngoài ra, tôi có ghi đè cho WebViewPage vì vậy tôi có thể ghi đè khởi tạo cho người trợ giúp, nhưng tôi không có đầu mối về cách thức hoặc cách thức.
Edit:
Tôi đã cố gắng này ở hai máy tính và, kỳ quặc đủ, nó hoạt động trên máy tính khác. Vì vậy, câu hỏi sẽ thực sự trở thành:
Tại sao VirtualPathProvider hoạt động trên một và không thành công 50% trên một máy tính khác? Nhưng sau đó câu hỏi này sau đó sẽ trở nên hơi mơ hồ, thậm chí còn mang tính đầu cơ. Tuy nhiên tôi không hài lòng với điều này nhưng có vẻ như tôi sẽ phải cài đặt lại một số thứ. :(
Ý của bạn là gì? Chế độ xem con không đi tới 'VirtualPathProvider' tùy chỉnh trong thử nghiệm của tôi. Đây là [test project] của tôi (https://dl.dropboxusercontent.com/u/14576915/VirtualPath. Nếu bạn nhìn vào tab Output trong VS, bạn sẽ thấy 'GetFile/Views/Home/Child.cshtml' được ghi vào yêu cầu đầu tiên – LostInComputer
@LostInComputer Dự án của bạn hoạt động thực sự, tôi sẽ xác định xem dự án của tôi có sử dụng hay không Nó cũng có thể là một sự khác biệt gói.Nếu không dự án của tôi có thể bị rối tung lên.Đối với tôi nó chỉ không hoạt động cho Html.RenderAction.Tôi sẽ xem xét nó.Thanks cho dự án ví dụ của bạn – Silvermind
Có lẽ các tập tin đã được lưu trữ để 'GetFile' và' FileExist' không được gọi cho tệp đó nữa – LostInComputer