我设置了一个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%? 但是,这个问题在某种程度上会变得含糊不清,甚至是投机性的。 尽管如此,我对此并不满意,但似乎我不得不重新安装一些东西。 :(
答案 0 :(得分:4)
用户LostInComputer非常友好地交出了一个在我的笔记本上运行的示例项目,我对这有什么不同感到困惑。
通常人们会期望Html帮助者只为VirtualPathProvider
工作,现在我知道它应该。
实际问题在于我遇到问题的特定电脑的安装,重新安装后一切正常。 所以它并不是一个非常复杂的解决方案,但由于很少关注这个问题,我至少给出了我自己的答案,因为这对某些人来说可能是有用的东西,有些可能会变得无聊。 :)
当你肯定希望某些东西可以工作时,你总是可以尝试在另一台机器上运行它(如果你有一台可用的话),因为最终所有可能错误的可能只是一个腐败安装。 :(