一般情况下,Response.Redirect 方法是在服务器端进行转向,因此,除非使用 Response.Write("<script>window.location='http://dotnet.aspx.cc';</script>") 方法外,是不能在新窗口打开所指定的 URL 地址的。但是,如果仔细分析一下,如果设置 form 元素的 target 属性,还是有办法打开新窗口的。下面就是可以采用的两种方法。
方法一:在服务器端设置 target 属性,这个方法也非常适用于客户端不支持脚本的情况。代码如下:
protected void Page_Load(object sender, EventArgs e)
{
form1.Target = "_blank";
}
protected void Button1_Click(object sender, EventArgs e)
{
Response.Redirect("http://dotnet.aspx.cc");
}
{
form1.Target = "_blank";
}
protected void Button1_Click(object sender, EventArgs e)
{
Response.Redirect("http://dotnet.aspx.cc");
}
办法二:采用客户端脚本的方法设置 target 属性。代码如下:
protected void Page_Load(object sender, EventArgs e)
{
Button1.Attributes.Add("onclick", "this.form.target='_newName'");
}
protected void Button1_Click(object sender, EventArgs e)
{
Response.Redirect("http://dotnet.aspx.cc");
}
{
Button1.Attributes.Add("onclick", "this.form.target='_newName'");
}
protected void Button1_Click(object sender, EventArgs e)
{
Response.Redirect("http://dotnet.aspx.cc");
}
总结前两种方法都有一定的局限性,如:Button1放在UpdatePanel中,上述两种方式就不能打开新的页面。而且第一种方式会对整个页面都产生影响。
下面这种方式是一种比较理想的解决方式。
string jsStr1 = "<script>window.open('" + url+ "')</script>";
ScriptManager.RegisterStartupScript(this.paperlist_div, this.GetType(), "Alert", jsStr1, false);
ScriptManager.RegisterStartupScript(this.paperlist_div, this.GetType(), "Alert", jsStr1, false);