using System;
using System.Web;
using System.Web.UI;
Â
public static class EnhancedRedirect
{
   public static void RelativeRedirect(this HttpResponse response, string path)
   {
       RelativeRedirect(response, path, "_self");
   }
Â
   public static void RelativeRedirect(this HttpResponse response, string path, string target)
   {
       RelativeRedirect(response, path, target, string.Empty);
Â
   }
Â
   public static void RelativeRedirect(this HttpResponse response, string path, string target, string windowFeatures)
   {
       if (!string.IsNullOrEmpty(path) && !path.StartsWith("http:") && !path.Contains("//"))
           Redirect(response, path, target, windowFeatures);
       else
       {
           throw new InvalidOperationException("Cannot redirect outside of the current site.");
       }
   }
Â
   public static void Redirect(this HttpResponse response, string url, string target, string windowFeatures)
   {
       Redirect(response, path, target, string.Empty);
   }
Â
   public static void Redirect(this HttpResponse response, string url, string target, string windowFeatures)
   {
       if ((String.IsNullOrEmpty(target) || target.Equals("_self", StringComparison.OrdinalIgnoreCase)) && String.IsNullOrEmpty(windowFeatures))
       {
           response.Redirect(url);
       }
       else
       {
           Page page = (Page)HttpContext.Current.Handler;
           if (page == null)
           {
               throw new InvalidOperationException("Cannot redirect to new window outside Page context.");
           }
           url = page.ResolveClientUrl(url);
           string script;
           if (!String.IsNullOrEmpty(windowFeatures))
           {
               script = @"window.open(""{0}"", ""{1}"", ""{2}"");";
           }
           else
           {
               script = @"window.open(""{0}"", ""{1}"");";
           }
           script = String.Format(script, url, target, windowFeatures);
           ScriptManager.RegisterStartupScript(page, typeof(Page), "Redirect", script, true);
       }
   }
}