0

部分的なビューを持つ MVC 4 コントローラーがあります。このビューは、ユーザーが更新を要求したときに JQuery コールバックを使用して呼び出されます。ページが最初に読み込まれ、最初のコールバックが行われると、すべて正常に動作しますが、後続の更新リクエストはサーバーにヒットせず、ローカル キャッシュからプルされているようです。MVC によって作成された最初の応答は、応答ヘッダーを追加しCache-Control: private, s-maxage=0ます。これを変更して、このビューへの呼び出しがキャッシュされず、各要求で更新要求が受け入れられるようにする方法はありますか?

ここにビューのサンプルがあります

public PartialViewResult HubStatistics(OverviewQuery query)
{
    var model = _portalDal.GetStatistics(query);

    return PartialView("_HubStatistics", model);
}

更新が要求されたときに呼び出されるクライアント側スクリプトのサンプルを次に示します。

function UpdateHubStatistics(id, start, end) {
    $.get("/hub/statistics?a=" + id + "&s=" + start + "&e=" + end, function (data) {
        $('.statistics').fadeOut(150, function () {
            $('.statistics').html(data);
            $('.statistics').fadeIn(200);
         });
    });
}

注:入力値のいずれかが変更された場合、すべて正常に機能しますが、入力値が同じ場合はそうではありません

4

2 に答える 2

2

を部分ビューに追加OutputCacheAttributeします。

[OutputCache(Duration = 0)]
public PartialViewResult HubStatistics(OverviewQuery query) { ... }

これにより、サーバー、プロキシ、およびクライアントが結果をキャッシュしないように強制されます。

于 2013-06-18T19:38:21.433 に答える
1

のように、クエリ文字列の末尾に乱数を追加してみることができます。&_=.342342334これは、設定したときに jQuery が行うことですcache: false

Cache-Control:no-cacheと同様に応答ヘッダーに追加することもできますPragma:no-cacheが、ブラウザーはこれらのヘッダーを異なる方法で解釈します (ただし、通常はCache-Controlヘッダーを尊重します)。

于 2013-06-18T19:33:06.740 に答える