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