Html帮助程序不使用自定义VirtualPathProvider

我建立了一个VirtualPathProvider并且它可以在地址栏中直接调用URL,例如http://.../home/index

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);
    }

}

但是,我希望这也适用于Html帮助程序,但现在它忽略了视图中的帮助程序调用的VirtualPathProvider

@{
     Html.RenderAction("index", "home");
}

有没有办法解决这个问题?

另外我有一个覆盖WebViewPage,所以我可以重写助手的初始化,但我没有得到什么或如何的线索。

编辑:

奇怪的是,我在另外一台电脑上运行过。 所以这个问题实际上会变成:

为什么VirtualPathProvider可以在另一台计算机上工作而失败50%? 但那么这个问题就会变得模糊,甚至是投机。 尽管如此,我对此并不满意,但似乎我不得不重新安装一些东西。 :(


用户LostInComputer很友善地交出了一个在我的笔记本上工作的示例项目,我很困惑会有什么不同。

通常人们会希望Html助手能够为VirtualPathProvider工作,现在我知道它应该。

实际的问题在于我在遇到问题时安装特定的电脑,并且在重新安装一切正常工作后。 所以这不是一个复杂的解决方案,但是由于对这个问题的关注很少,所以我至少给出了我自己的答案,因为这对某些人来说可能是有用的东西,可能会有多么沉闷。 :)

当你肯定希望某些东西能够工作时,你总是可以尝试在不同的机器上运行它(如果你有一个可用的),因为最终所有可能的错误可能只是一个腐败的安装。 :(

链接地址: http://www.djcxy.com/p/76185.html

上一篇: Html helper does not use custom VirtualPathProvider

下一篇: small routine program