3

当我通过我的自定义 VirtualPathProvider 加载数据时,我得到了一些奇怪的行为。值得一提的是,我正在尝试将此视图用作布局。

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 方法中解决这个问题。

谢谢!

更新:错误消息的图像 在此处输入图像描述

4

1 回答 1

1

您是否为 Razor 正确设置了 web.config?如果您不指定pageBaseTypeWebViewPage您将无法访问它,因为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

默认情况下,PageBaseType的默认值为System.Web.WebPages.WebPage

于 2012-02-16T15:31:27.077 回答