I have a view that makes an ajax call to a action method.
$.ajax({
url: url to action,
type: 'GET',
cache: false,
dataType: 'html',
success: function(result) {
$("#divPatient").html(result);
$("#divPatient").show("blind", { }, 2000);
$("#loadingImage").hide();
PrepPatientHtml();
}
});
The action method returns html as you can see. The site is driven off a SQL database, which when changed should effect the output of the action. I've added a NoCache Action Filter
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);
}
}
For some reason, the cache never gets invalidated when a change is made to the database supporting the view. Anyone have any thoughts? The view is fairly simple:
@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>
}