Creating an Ajax.ActionLink that avoids all caching issues

Posted by Richard Ev on Stack Overflow See other posts from Stack Overflow or by Richard Ev
Published on 2010-05-21T14:27:38Z Indexed on 2010/05/21 14:30 UTC
Read the original article Hit count: 665

I am using an Ajax.ActionLink to display a partial view that shows a settings dialog (the modality of which is arranged using jQuery UI dialog).

The issue I am running into is around browser caching. It is important that the user is never shown a cached settings dialog. In an attempt to achieve this I have written the following extension method that has the same method signature as the ActionLink method overload that I am using.

/// <summary>
/// Defines an AJAX ActionLink that effectively bypasses browser caching issues
/// by adding an additional route value that contains a unique (actually DateTime.Now.Ticks) value.
/// </summary>
public static MvcHtmlString NonCachingActionLink(this AjaxHelper helper, string linkText, string actionName, string controllerName, System.Web.Routing.RouteValueDictionary routeValues, AjaxOptions ajaxOptions)
{
    routeValues.Add("rnd", DateTime.Now.Ticks);
    return helper.ActionLink(linkText, actionName, controllerName, routeValues, ajaxOptions);
}

This works well between browser sessions (as the rnd route value gets re-calculated on page load), but not if the user is on the page, makes settings changes, saves them (which is done with another ajax call) and then re-displays the settings dialog.

My next step is to look into creating my own ActionLink equivalent that re-calculates a random query string component as part of the onclick JavaScript event handler.

Thoughts please.

© Stack Overflow or respective owner

Related posts about asp.net-mvc

Related posts about asp.net-mvc-2