我已经设置了一个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的安装上,我在重新安装后以及重新安装后都遇到了问题,一切正常。
因此,这并不是一个复杂的解决方案,但是由于对此问题鲜有关注,因此我至少要给出自己的答案,因为有一天它对别人来说可能是有用的东西,可能会很沉闷。 :)
如果您确实希望某些功能可以正常工作,则可以始终尝试在另一台计算机上运行它(当然,如果有可用的话),因为最后所有可能出错的地方可能只是安装错误。 :(