模态化窗口时一showModalDialog来弹出模态化窗口的,以window.parent.returnValue来接受返回值并返回给父窗体
示例如下:实现弹出模态化窗口,在模态化窗口中返回传值给父窗口
cs端代码:
Response.Write("<script>window.parent.returnValue='" + url + "';window.parent.close();</script>");
//url为返回的值,返回后把模态化窗口关闭
javascript代码
function fnCallDialog() {
//模态化窗口返回值
var values = "";
values = showModalDialog("FileInfoDB/Show.aspx", values, "status:no;Help:no;resizable:yes");
//如果返回正确 则将返回值赋值给Address
if (values) {
document.Form1.Address.value = values;
}
}
=====================================================================
咋一看,上面的代码完全可以实现所要的功能。从语法上理解是没问题的,但是在实际操作中就会出现点击模态化窗口返回值的时候就会出现如下问题:
点击模态化窗体传值,并且关闭模态化窗口的时候发现重新打开了一个新窗口,在新窗口中点击传值关闭时,新窗口关闭,但是模态化窗体依然没有关闭,值也没有传过去
解决这个问题的方法是:
将模态化窗体以frameset的形式嵌入到fram窗体内,
具体操作如下:
父窗体程序:假设父窗体为right.aspx
function wopen() {
//模态化窗口返回值
var returnValue = showModalDialog('FileInfoDB/ShowMain.aspx', 0, "dialogWidth:650px;dialogHeight:500px;help:no;center:yes;resizable:no;status:no;scroll:no");
//如果返回正确 则将返回值赋值给Address
if (returnValue != "" && returnValue != undefined) {
Form1.Address.value = returnValue;
}
}
弹出ShowMain.aspx,ShowMain.aspx中嵌入Show.aspx(最终传值页面)
新建fram窗体ShowMain.aspx并且将最终要做操作的页面Show.aspx嵌入其中:
ShowMain.aspx<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ShowMain.aspx.cs" Inherits="Three_points_screen.Server.FileInfoDB.ShowMain" %>
<HTML>
<HEAD>
<TITLE>选择管理员</TITLE>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
<meta content="no-cache" http-equiv="Pragma">
<meta content="no-cache" http-equiv="Cache-Control">
<meta content="0" http-equiv="Expires">
</HEAD>
<frameset rows="0,*" frameborder="no" border="0" framespacing="0">
<frame src="about:blank" scrolling="no" noresize>
<frame src="Show.aspx" scrolling="no">
</frameset>
</HTML>
传值页面最终代码:
url为要返回的值
Response.Write("<script>window.parent.returnValue='" + url + "';window.parent.close();</script>");