2012-04-19 21 views
0

私はアクションメソッドへのajax呼び出しを行うビューを持っています。Asp.net MVC 3キャッシング

$.ajax({ 
url: url to action, 
type: 'GET', 
cache: false, 
dataType: 'html', 
      success: function(result) { 
       $("#divPatient").html(result); 
       $("#divPatient").show("blind", { }, 2000); 
       $("#loadingImage").hide(); 
       PrepPatientHtml(); 
      } 
     }); 

アクションメソッドは、表示されるようにhtmlを返します。サイトはSQLデータベースから動かされ、変更されたときにアクションの出力に影響が及ぶはずです。 NoCacheアクションフィルタを追加しました

public class NoCache : ActionFilterAttribute 
    { 
     public override void OnResultExecuting(ResultExecutingContext filterContext) 
     { 
      filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1)); 
      filterContext.HttpContext.Response.Cache.SetValidUntilExpires(false); 
      filterContext.HttpContext.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches); 
      filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache); 
      filterContext.HttpContext.Response.Cache.SetNoStore(); 

      base.OnResultExecuting(filterContext); 
     } 
    } 

何らかの理由で、ビューをサポートしているデータベースが変更されたときにキャッシュが無効になることはありません。誰でも考えがありますか?ビューは非常に簡単です:

@using (Html.BeginForm("Save", "Home", FormMethod.Post, new { id = "frm" })) 
{ 
    <div style="padding: 10px;"> 
     <h1 id="questionsHeader">@Model.FullName (@Model.Dob)</h1> 
     @for (var i = 0; i < Model.Episodes.Count; i++) 
     { 
      @Html.EditorFor(model => model.Episodes[i]) 
     } 
    </div> 
    <div style="padding-top: 10px; border-top: solid 1px #666666; margin-top: 5px; text-align: right;"> 
     <input type="submit" id="btnSaveAnswers" value="Save Answers" />   
    </div> 
} 

答えて

0

使用あなたの行動のために、この注釈は:

[OutputCache(Duration = 0)] 
+0

同じ結果を試しました。エンティティフレームワークが私のためにデータをキャッシュしているかのようです。 – jsteve81

0

私はそれがフレームワークになるとは考えていないか、あなたは「エンティティフレームワーク」と呼ばれるよう(おそらくあなたがしたかったです他の何かを言う)。

アクションを実際に実行していたかどうかを確認するためにアプリケーションをデバッグしましたか?

「はい」の場合、同じ結果をもたらすオブジェクトがキャッシュされていますか?

私の推測では、あなたのブラウザは結果をキャッシュしています。

あなたはこれを試していました:

response.setHeader("Pragma", "no-cache"); 
response.setHeader("Cache-Control", "no-cache"); 
response.setDateHeader("Expires", 0); 

それが動作しない場合は、のようなランダムなパラメータを追加することによって、URLを変更してみてください:

ユニークIDは、()を取得関数です
+ '&uid=' + uniqueId() 

あなたは時間のユニークな文字列、時間の目盛のようにurlencoded。

この最後のオプションは最善ではないかもしれませんが、確かに最も簡単で最速で確実に動作します。

+0

なぜ匿名のdownvoteですか? –

+1

+1クエリーリングの一意性について私は考えなかった –