当我通过自定义 VirtualPathProvider 加载数据时,出现一些奇怪的行为。 值得一提的是,我正在尝试使用此 View 作为布局。
public class MyVirtualPathProvider : VirtualPathProvider
{
public MyVirtualPathProvider()
: base()
{
}
public override CacheDependency GetCacheDependency(string virtualPath, IEnumerable virtualPathDependencies, DateTime utcStart)
{
if ((virtualPath.StartsWith("/Path/") ||
virtualPath.StartsWith("~/Path/")) && virtualPath.EndsWith(".cshtml"))
{
String name = virtualPath.Replace("/Path/", "").Replace(".cshtml", "");
Uri uri = new Uri("http://www.example.com/Handler.ashx?path=" + name);
return new WebCacheDependency(uri.ToString());
}
return base.GetCacheDependency(virtualPath, virtualPathDependencies, utcStart);
}
public override bool FileExists(string virtualPath)
{
if ((virtualPath.StartsWith("/Path/") ||
virtualPath.StartsWith("~/Path/")) && virtualPath.EndsWith(".cshtml"))
return true;
return base.FileExists(virtualPath);
}
public override VirtualFile GetFile(string virtualPath)
{
if (virtualPath.StartsWith("/Path/") || virtualPath.StartsWith("~/Path/"))
return new TemplateVirtualFile(virtualPath);
return base.GetFile(virtualPath);
}
}
我还实现了一个自定义(虚拟)CacheDependency
public class WebCacheDependency : CacheDependency
{
public WebCacheDependency(String url)
{
this.SetUtcLastModified(DateTime.UtcNow);
}
}
现在有两件事不起作用。首先,所有加载的 View 都被缓存,其次,文件内的代码(@Html.ActionLink ...等)不起作用,它只是给出错误“程序集丢失”。
有人知道如何解决这两个问题吗?
第二个问题( link )已经有了解决方案,但是我真的不明白如何在 FileExists 方法中解决这个问题。
谢谢!
更新:错误消息的图像
最佳答案
您的 web.config 是否已为 Razor 正确设置?如果您不指定 WebViewPage
的 pageBaseType,您将无法访问 ViewBag
,因为它不是默认的基本类型,WebPageBase
.
您的 web.config 应如下所示:
<system.web.webPages.razor>
<pages pageBaseType="System.Web.Mvc.WebViewPage">
[...]
</pages>
</system.web.webPages.razor>
请注意pageBaseType 属性。更多信息请点击:http://msdn.microsoft.com/en-us/library/system.web.webpages.razor.configuration.razorpagessection.pagebasetype(v=vs.99).aspx
By default, the default value for PageBaseType is System.Web.WebPages.WebPage.
关于asp.net-mvc-3 - 从自定义 VirtualPathProvider(ASHX 源)加载 Razor View 时出现奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6719338/