1

Html.Actionビューで CacheControl が有効になっているアクションの結果を表示するために使用すると、問題が発生します。

コード

[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*"]
public class CachedController : Controller
{
    public ViewResult CachedAction()
    {
        var model = GetFromDB();
        return PartialView(model);  
    }
}

SomeView.cshtml ファイルで、コードがある場合

@Html.Action("CachedAction", "Cached")

HTTP 500 エラーが発生し、SomeView.cshtml の html が次のようなpreタグで囲まれたブラウザーに送信されます。

<!DOCTYPE html>
<html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <pre>
            // HTML for someView.cshtml here
        </pre>
    </body>
</html>

ここで何が問題なのか誰でも知っていますか?

注: OutputCacheAttribute を削除すると、コードは期待どおりに機能し、ビューが正しく表示されます。

4

4 に答える 4

1

コントローラー定義の上ではなく、アクションのすぐ上で属性を使用してみてください。

于 2012-12-20T12:13:34.283 に答える
1

現時点では、アクションではなくコントローラー全体にキャッシュを設定しています。

コードが次のようになるように移動してみてください。

public class CachedController : Controller
{
     [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*"]
     public ViewResult CachedAction()
     {
          var model = GetFromDB();
          return PartialView(model);  
     }
}

もちろん、それがあなたの意図であった場合を除きますが、あなたの質問からは明らかではありません。

于 2012-12-20T12:16:54.277 に答える
1

私の問題を修正しました。OutputCache 属性を使用して、このコントローラーのアクションに対して出力をキャッシュしないように指定していましたが、この要件を持つアクションはごくわずかで、単純にコントローラーのすべてのアクションに適用していました。

コントローラーからキャッシュを削除し、必要なアクションを OutputCache 属性で装飾することで問題を修正しました。キャッシュされた Html.Action がある場合、ASP.NET MVC コードがページをレンダリングする方法にも問題があります。パーシャルがロードされないことが予想されます。しかし、このページでは、ページ全体がロードされていません。

この問題は主に文脈に依存していることを認識しています。この投稿に対するコメントや回答として提供された多くのアドバイスを参考にしました。また、自分の回答を承認済みとしてマークしたくありません。したがって、この問題のデバッグに関するヒントをまとめて回答を更新する場合は、それを承認済みとしてマークします。

于 2012-12-22T04:49:25.130 に答える
-1

使用する代わりに

@Html.Action("CachedAction", "Cached")

以下を試してください

@Html.Partial("CachedAction")
于 2016-03-17T21:11:55.663 に答える