2013-12-16 17 views
7

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ứ. :(

+1

Ý 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

+0

@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

+0

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

Trả lời

4

tài LostInComputer là loại, đủ để giao một dự án mẫu mà làm việc trên máy tính xách tay của tôi và tôi đã nhầm lẫn về những gì sẽ là sự khác biệt.

Thông thường người ta sẽ mong đợi thực sự là những người giúp đỡ Html sẽ chỉ công việc VirtualPathProvider, và bây giờ tôi biết nó nên

Vấn đề thực tế nằm trong quá trình cài đặt của máy tính cụ thể mà tôi gặp phải vấn đề và sau khi cài đặt lại mọi thứ hoạt động tốt. , nhưng vì đã có rất ít sự chú ý đến câu hỏi này, tôi đang ở ít nhất là đưa ra câu trả lời của riêng tôi, bởi vì điều này có thể là công cụ hữu ích cho người khác một ngày nào đó, làm thế nào ngu si đần độn nó có thể được. :)

Khi bạn chắc chắn sẽ làm điều gì đó, bạn luôn có thể chạy trên một máy khác (nếu bạn có sẵn), bởi vì cuối cùng tất cả những gì có thể sai chỉ là cài đặt bị hỏng. :(

Các vấn đề liên quan