1

mvc 2 beta 2 から rc にアップグレードして以来、Internet Explorer での ajax 送信に問題があります。jquery フォーム ポストを実行すると、関数はコントローラー アクションに URL を返します。これは、コントローラ アクションが ajaxrequest であると認識し、部分ビューをパイプしてページを更新することで正常に機能しました。これは Firefox でも問題なく動作しますが、Internet Explorer では、コントローラ アクションへの最後の呼び出しがキャッシュから取得され、返されるため、部分的ではなく完全なビューが返されます。

outputcache を 0 に設定しようとしましたが成功しませんでした。また、ここで説明されているように nocache actionfilter も試しまし。IE がキャッシュからプルするのを止める唯一の方法は、キャッシュされたバージョンを物理的に削除することです。

誰にもアイデアはありますか (これがあまり明確でない場合は申し訳ありません。説明するのは難しいです!)?

4

2 に答える 2

3

何らかの理由で、IE は AJAX GET のキャッシュに非常に積極的です。したがって、AJAX 経由で取得している場合、その動作は驚くべきことではありません。また、キャッシングを行っているのはサーバーではなく IE であるため、出力キャッシュ属性を使用しても問題が解決しなかったことも驚くべきことではありません。必要なことは、HTTP に適切なヘッダーを設定して、リクエストをキャッシュしないように IE に指示することです。その方法は次のとおりです。

    [CacheControl(HttpCacheability.NoCache), HttpGet]
    public JsonResult DoStuff()
    {
        //...
    }

public class CacheControlAttribute : ActionFilterAttribute
{
    public CacheControlAttribute(HttpCacheability cacheability)
    {
        this._cacheability = cacheability;
    }

    private HttpCacheability _cacheability;

    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        HttpCachePolicyBase cache = filterContext.HttpContext.Response.Cache;
        cache.SetCacheability(_cacheability);
    }
}
于 2010-01-08T13:06:26.100 に答える
0

クレイグの素晴らしい解決策に私の 2 セント -

ユーザー コントロールを使用し、「RenderAction」を使用してレンダリングする場合

<% Html.RenderAction("UserList", "User"); %>

そして、このページは POST と同様に GET を介してそれを呼び出し、属性宣言で要求メソッドについて言及しません。

[CacheControl(HttpCacheability.NoCache)]

たとえば、検索グリッドとその上に検索パネルがあります。AJAX (GET) を介して並べ替えとページングを呼び出すことができるように、Grid をユーザー コントロールにしましたが、「検索」ボタン (POST) を押したときにも呼び出されるため、両方に必要です。

于 2011-12-19T15:27:00.887 に答える