Asp.net mvc 3 从自定义VirtualPathProvider(ASHX源代码)加载razor视图时的奇怪行为
当我通过自定义VirtualPathProvider加载数据时,会出现一些奇怪的行为。 可能需要指出的是,我正在尝试将此视图用作布局Asp.net mvc 3 从自定义VirtualPathProvider(ASHX源代码)加载razor视图时的奇怪行为,asp.net-mvc-3,razor,virtualpathprovider,viewbag,cache-dependency,Asp.net Mvc 3,Razor,Virtualpathprovider,Viewbag,Cache Dependency,当我通过自定义VirtualPathProvider加载数据时,会出现一些奇怪的行为。 可能需要指出的是,我正在尝试将此视图用作布局 public class MyVirtualPathProvider : VirtualPathProvider { public MyVirtualPathProvider() : base() { } public override CacheDependency GetCacheDependency(str
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);
}
}
现在有两件事是行不通的。首先,所有加载的视图都被缓存,其次,文件(@Html.ActionLink…等)中的代码不起作用,它只会给出一个错误“缺少程序集”
有人知道如何解决这两个问题吗
第二个问题()已经有了解决方案,但是我真的不知道如何在FileExists方法中解决这个问题
谢谢大家!
更新:错误消息的图像
您是否为Razor正确设置了web.config?如果不指定
WebViewPage
的pageBaseType,您将无法访问ViewBag
,因为它不在默认的基本类型WebPageBase
中
您的web.config应该如下所示:
<system.web.webPages.razor>
<pages pageBaseType="System.Web.Mvc.WebViewPage">
[...]
</pages>
</system.web.webPages.razor>
[...]
请注意pageBaseType属性。更多信息请点击此处:
默认情况下,PageBaseType的默认值为