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);
    }
}

現在、機能しないものが2つあります。まず、ロードされたすべてのビューがキャッシュされ、次に、ファイル内のコード(@ Html.ActionLink ...など)が機能せず、「アセンブリがありません」というエラーが表示されます。

これらの2つの問題を解決する方法を誰かが考えていますか?

2番目の問題(リンク)の解決策はすでにありますが、FileExistsメソッド内でこの問題をどのように解決できるかは実際にはわかりません。

ありがとうございました!

更新:エラーメッセージの画像 ここに画像の説明を入力してください

4

1 に答える 1

1

web.configがRazor用に適切に設定されていますか?pageBaseTypeを指定しない場合、デフォルトの基本タイプではないWebViewPageため、にアクセスできません。ViewBagWebPageBase

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 に答える