我已经设置了一个VirtualPathProvider,它对于地址栏中的http://.../home/index之类的直接url调用工作正常。

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帮助器,但是现在它忽略了 View 中html帮助器调用的VirtualPathProvider:
@{
     Html.RenderAction("index", "home");
}

有办法解决这个问题吗?

另外,我有一个WebViewPage的替代,因此我可以替代辅助程序的初始化,但是我不知道什么或如何做。

编辑:

我已经在两台计算机上进行了尝试,奇怪的是,它可以在另一台计算机上工作。
因此,问题实际上将变为:

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

最佳答案

用户LostInComputer非常友善,可以交出可以在我的笔记本上运行的示例项目,而我对两者之间的区别感到困惑。

通常,人们确实希望Html帮助程序能够为VirtualPathProvider工作,现在我知道应该如此。

实际问题出在特定PC的安装上,我在重新安装后以及重新安装后都遇到了问题,一切正常。
因此,这并不是一个复杂的解决方案,但是由于对此问题鲜有关注,因此我至少要给出自己的答案,因为有一天它对别人来说可能是有用的东西,可能会很沉闷。 :)

如果您确实希望某些功能可以正常工作,则可以始终尝试在另一台计算机上运行它(当然,如果有可用的话),因为最后所有可能出错的地方可能只是安装错误。 :(

09-11 19:52