Perhaps you need a custom route ?:
public class PreviewRoute : System.Web.Routing.Route { ... public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values) { var preview = System.Web.HttpContext.Current.Session["Preview"]; if (!values.ContainsKey("Preview")) values.Add("Preview", preview); var path = base.GetVirtualPath(requestContext, values); return path; } }
}
Install Session["Preview"] at any time and you will get all your URLs using ?Preview=True :
System.Web.HttpContext.Current.Session.Add("Preview", true);
UPDATED:
Use this route in the Global.asax.cs file:
routes.Add("Default", new PreviewRoute("{controller}/{action}/{id}", new MvcRouteHandler()) { Defaults = new RouteValueDictionary( new { controller = "Home", action = "Index", id = "" } ) } );
instead:
routes.MapRouteLowercase( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = "" } // Parameter defaults );
You can also try this extension:
public static class CustomRouteExtensions { public static void MapPreviewRoute(this RouteCollection routes, string name, string url, object defaults) { routes.MapPreviewRoute(name, url, defaults, null); } public static void MapPreviewRoute(this RouteCollection routes, string name, string url, object defaults, object constraints) { if (routes == null) { throw new ArgumentNullException("routes"); } if (url == null) { throw new ArgumentNullException("url"); } var route = new PreviewRoute(url, new MvcRouteHandler()) { Defaults = new RouteValueDictionary(defaults), Constraints = new RouteValueDictionary(constraints) }; if (String.IsNullOrEmpty(name)) { routes.Add(route); } else { routes.Add(name, route); } } }
In Global.asax.cs:
routes.MapPreviewRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = "" } // Parameter defaults );