What would be a simple way to force my ActionResult
to always fire when I hit this page? On browser back click, for instance, this will not execute.
You could try the onunload
event and ajax:
<script>
window.onunload = function () {
$.ajax({
url: '/ControllerName/Index',
type: 'POST',
datatype: "json",
contentType: "application/json; charset=utf-8"
});
};
</script>
Disabling cache on the ActionResult
forces the page to refresh each time rather than rendering the cached version.
[OutputCacheAttribute(VaryByParam = "*", Duration = 0, NoStore = true)]
public ActionResult Index()
{
//do something always
return View();
}
Now when you click the browsers back button, this is hit every time.
Adding this code to my HTML works just fine for me:
<input id="alwaysFetch" type="hidden" />
<script>
setTimeout(function () {
var el = document.getElementById('alwaysFetch');
el.value = el.value ? location.reload() : true;
}, 0);
</script>
This might come handy for those who prefer not to deal with server side code as opposed to the accepted solution.
All it does is assign a value to a hidden input on first load which will remain on the second load in which case the page is force refreshed.