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

时间:2013-12-16 10:34:17

标签: c# asp.net-mvc-4 razor

我设置了一个VirtualPathProvider,它可以正常使用地址栏中的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帮助程序,但是现在它忽略了视图中html帮助程序调用的VirtualPathProvider

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

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

另外我对WebViewPage有一个覆盖,所以我可以覆盖帮助器的初始化,但我还没有弄清楚是什么或如何。

修改

我在两台计算机上试过这个,奇怪的是,它可以在另一台计算机上运行。 所以问题实际上会变成:

为什么VirtualPathProvider在一台计算机上运行,​​在另一台计算机上运行50%? 但是,这个问题在某种程度上会变得含糊不清,甚至是投机性的。 尽管如此,我对此并不满意,但似乎我不得不重新安装一些东西。 :(

1 个答案:

答案 0 :(得分:4)

用户LostInComputer非常友好地交出了一个在我的笔记本上运行的示例项目,我对这有什么不同感到困惑。

通常人们会期望Html帮助者VirtualPathProvider工作,现在我知道它应该。

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

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