转载 Response.Redirect如何打开新页面转载 response.redirect

原文地址:Response.Redirect如何打开新页面(转载)作者:lwpmf520

众所周知,Response.Redirect打开页面时,会覆盖当前页面。现在想打开一个新页面,当前页面不变。于是用了如下代码:

Response.Write("<script language=JavaScript>window.open('"+ strUrl +"' ,'_blank','');</script>");

现在的确可以弹出新页面了.但是不知为何,当前页面的CSS丢失了.在未点击Preview按钮前,页面的排版如下:


字体都比较小,也比较漂亮一点.点击Preview按钮后,的确打开了新页面,但当前页面变成如下效果:


[转载]Response.Redirect如何打开新页面(转载) response.redirect

相比上一幅图,可以看到字体明显变大.

为什么会这样呢?

如何打开新页面又不影响当前页面的css设置呢?

历尽千辛万苦,终于找到一篇文章:http://stackoverflow.com/questions/104601/asp-net-response-redirect-to-new-window

据说在此按钮中加上此句,即可:

OnClientClick="aspnetForm.target ='_blank';"

经试验,果然成功.当前页面的css正常,不会改变.不过由于页面还有其他按钮,而其他按钮的click是不应该打开新页面的.那么我们可以这样做:

<script type="text/javascript">
functionfixform() {
if(opener.document.getElementByIdx_xx_x_x("aspnetForm").target !="_blank")return;
opener.document.getElementByIdx_xx_x_x("aspnetForm").target ="";
opener.document.getElementByIdx_xx_x_x("aspnetForm").action = opener.location.href;
}
</script>

还要加上

<body onload="fixform()">

而我用的是Master和Content模式,首先报错:

去掉opener之后,还是老问题,所有的按钮都会弹出新页面.没办法,转战其他方法.只好采用扩展方法,给Response.Redirect重写了一下,如下:

publicstaticclassResponseHelper
{
publicstaticvoidRedirect(thisHttpResponse response,stringurl,stringtarget,stringwindowFeatures)
{
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)
{
thrownewInvalidOperationException("Cannot redirect to new window outside Page context.");
}
url = page.ResolveClientUrl(url);
stringscript;
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);
}
}
}

调用时这样写就可以

Response.Redirect(redirectURL,"_blank","menubar=0,scrollbars=1,width=780,height=900,top=10");

但扩展方法是.NET 3.5才有的特性,而客户的服务器仅支持.NET2.0。而且我也不愿意污染Response.Redirect方法。再次修改代码如下:

protectedvoidbtn_preview_Click(objectsender, EventArgs e)
{
m_currentPage = Pageaspacim.Base;
if(m_currentPage.genPreviewPages())
{
String scriptName ="previewClickScript";
Type clientScriptType =this.GetType();
// Get a ClientScriptManager reference from the Page class.
ClientScriptManager clientScript = Page.ClientScript;
// Check to see if the client script is already registered.
if(!clientScript.IsClientScriptBlockRegistered(clientScriptType, scriptName))
{
StringBuilder sb =newStringBuilder();
sb.Append("<script type='text/javascript'>");
sb.Append("window.open(' "+ URL +"')");//URL = where you want to redirect.
sb.Append("</script>");
clientScript.RegisterClientScriptBlock(clientScriptType, scriptName, sb.ToString());
}
}
}
终于。。。。终于。。。。成功啦!!!泪奔!!!

这次的难点是在Page点击某个Button后,要去后台cs那里保存当前页面的所有控件的值到数据库中(也就是说如果用AJAX,就要传递此页面所有控件的值到后台。如果仅仅有两三个控件,传值到后台当然没问题。但如果此页面上有很多控件呢?那光传值这个动作就要把人累死啦。所以用AJAX就不是太合适。),在后台保存完数据后,要打开一个新页面。Response.Redirect只能覆盖当前页面,用Response.Write(“<script>window.open(‘’)</script>”)方法能打开新页面,但是当前页面的css就无效了(不知道原因)。

而且我要求每次点击按钮,都要调用后台函数并打开新页面。(不是在Page.Load那里注册一次就完了。而且我要打开的页面地址也是动态生成的,在Page.Load的时候还拿不到这个地址。)

所以才有了这篇文章的出现。希望能帮到和我有同样困扰的童靴。

  

爱华网本文地址 » http://www.413yy.cn/a/25101013/164476.html

更多阅读

Win 7系统如何打开显卡的硬件加速? win7显卡硬件加速灰色

Win 7系统如何打开显卡的硬件加速?——简介 在计算机中,显卡已经有一定的效能水准,但我们在开启影音文件或游戏画面时仍然不是很流畅,原因是什么呢?我要问你:你使用了显卡硬件的加速功能没有?如果没有,那就是你的显卡还没有完全发挥它的效能

如何打开win7系统IE的缓存文件夹? ie缓存文件夹在哪

如何打开win7系统IE的缓存文件夹?——简介下边给出打开win7系统IE缓存文件夹的方法,希望能帮助到大家呵呵!!如何打开win7系统IE的缓存文件夹?——工具/原料win7 如何打开win7系统IE的缓存文件夹?——方法/步骤如何打开win7系统IE的缓存文

如何打开安装后缀为.iso的程序文件 安装程序后缀名

如何打开安装后缀为.iso的程序文件——简介我们在完整下载软件包的时候,现在网络上有不少软件是以ISO文件类型发布的,很多软件包的后缀名为.iso镜像文件,而不是常见的后缀为.exe的程序文件,ISO是一种镜像文件,它是将多个文件目录或者是整

360浏览器如何设置新标签页 精 360浏览器标签

360浏览器如何设置新标签页 精——简介360浏览器是我平时上网常用的一款浏览器,但是我们在上网的时候往往只专注于使用浏览器的上网快慢,对于浏览器的一些便捷功能的设置却不善于发现。磨刀不误砍柴工,我们要是稍花时间掌握了一些便捷

声明:《转载 Response.Redirect如何打开新页面转载 response.redirect》为网友那些年的小幸福分享!如侵犯到您的合法权益请联系我们删除