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);
}
}
}