关于父,子窗口的传递参数的试验

来源:互联网 发布:js将timestamp 编辑:程序博客网 时间:2024/06/05 10:59

 关于父,子窗口的传递参数的试验
  2分析
  31.    用到showModalDialog和showModelessDialog 
  42.    试验代码如下
  5<parent.aspx>
  6  
  7<body MS_POSITIONING="GridLayout">
  8        <form id="Form1" method="post" runat="server">
  9            <INPUT style="Z-INDEX: 101; LEFT: 112px; POSITION: absolute; TOP: 176px" type="text" id="Text1"
 10                name="Text1" runat="server"><INPUT style="Z-INDEX: 102; LEFT: 160px; POSITION: absolute; TOP: 240px" type="button"
 11                value="打开子窗口" name="test" id="Button1" onclick="openwin1()" runat="server"> <INPUT id="Text2" style="Z-INDEX: 103; LEFT: 336px; POSITION: absolute; TOP: 176px" type="text"
 12                name="Text2" runat="server">
 13        </form>
 14        <script language="javascript">
 15function openwin1()
 16{
 17var srcFile="child.aspx"//新窗口的文档名称 
 18 var winFeatures="dialogHeight:300px; dialogLeft:200px;"
 19var obj =Form1;//将form作为对象传递给新窗口 (注意传递的为表单对象 )  
 20           window.showModelessDialog(srcFile,obj,winFeatures) //window.showModelessDialog(srcFile,obj,winFeatures)
 21}

 22        </script>
 23    </body>
 24<child.spx>
 25  
 26</HEAD>
 27    <base target="_self"> <!--这句话非常重要,只要加上才能保证在弹出窗口中调用服务端代码而不会再弹出一个新窗口--> 
 28<body MS_POSITIONING="GridLayout">
 29<form id="SendForm">
 30<FONT face="宋体"><INPUT id="Text1" style="Z-INDEX: 101; LEFT: 88px; POSITION: absolute; TOP: 176px" type="text"
 31name="Text1" runat="server"><INPUT id="Text2" style="Z-INDEX: 102; LEFT: 288px; POSITION: absolute; TOP: 176px" type="text"
 32name="Text2" runat="server"></FONT> 
 33<INPUT id="Button1" style="Z-INDEX: 103; LEFT: 272px; POSITION: absolute; TOP: 272px" type="button"
 34value="Button" name="Button1" runat="server" onclick="send(SendForm.Text1.value,SendForm.Text2.value);">//对子窗体的按钮添加事件即点击的时候将两个文本框的内容传递到父文本框里面去
 35</form>
 36<script language="JavaScript">    
 37function send(val,val1)    
 38{        
 39    //取得父窗口传过来的对象  <生成父窗口的对象>      
 40    var myObj = window.dialogArguments;        
 41    //赋值 
 42    myObj.Text1.value = val; //将文本框的内容复给父对象传过来的对象的对应的文本框1 其中的text1。text2 是在父窗口中声明的
 43    myObj.Text2.value = val1; //将文本框的内容复给父对象传过来的对象的对应的文本框2
 44    //关闭窗口        
 45    window.close();    
 46}
 
 47</script> 
 48</body>
 49<3>总结 
 50一、showModalDialog和showModelessDialog有什么不同?
 51  showModalDialog:被打开后就会始终保持输入焦点。除非对话框被关闭,否则用户无法切换到主窗口。类似alert的运行效果。
 52showModelessDialog:被打开后,用户可以随机切换输入焦点。对主窗口没有任何影响(最多是被挡住一下而以。:P)
 532二、怎样才让在showModalDialog和showModelessDialog的超连接不弹出新窗口?
 54  在被打开的网页里加上<base target="_self">就可以了。这句话一般是放在和之间的。《./head》<base target="_self"><body>
 553    表单的提交为get方法
 564    三、怎样才刷新showModalDialog和showModelessDialog里的内容?
 57  在showModalDialog和showModelessDialog里是不能按F5刷新的,又不能弹出菜单。这个只能依靠javascript了,以下是相关代码:
 58
 59<body onkeydown="if (event.keyCode==116){reload.click()}">
 60<a id="reload" href="filename.htm" style="display:none">reload</a>
 61 将filename.htm替换成网页的名字然后将它放到你打开的网页里,按F5就可以刷新了,注意,这个要配合<base target="_self">使用,不然你按下F5会弹出新窗口的。
 62四、如何用javascript关掉showModalDialog(或showModelessDialog)打开的窗口。
 63  <input type="button" value="关闭" onclick="window.close()">
 64也要配合<base target="_self">,不然会打开一个新的IE窗口,然后再关掉的。

 

 

 

 


 65五《未实现
 66showModalDialog和showModelessDialog数据传递技巧。
 67  (作者语:本来想用一问一答形式来写的,但是我想不出这个怎么问,所以只好这样了。)
 68  这个东西比较麻烦,我改了好几次了不是没办法说明白(语文水平越来越差了),只好用个例子说明了。
 69  例子:
 70    现在需要在一个showModalDialog(或showModelessDialog)里读取或设置一个变量var_name
 71
 72      一般的传递方式:
 73        window.showModalDialog("filename.htm",var_name)
 74        //传递var_name变量
 75      在showModalDialog(或showModelessDialog)读取和设置时:
 76        alert(window.dialogArguments)//读取var_name变量
 77        window.dialogArguments="oyiboy"//设置var_name变量
 78    这种方式是可以满足的,但是当你想在操作var_name同时再操作第二个变理var_id时呢?就无法再进行操作了。这就是这种传递方式的局限性。
 79    
 80      以下是我建议使用的传递方式:
 81        window.showModalDialog("filename.htm",window)
 82        //不管要操作什么变量,只直传递主窗口的window对象
 83      在showModalDialog(或showModelessDialog)读取和设置时:
 84        alert(window.dialogArguments.var_name)//读取var_name变量
 85        window.dialogArguments.var_name="oyiboy"//设置var_name变量
 86
 87        同时我也可以操作var_id变量
 88        alert(window.dialogArguments.var_id)//读取var_id变量
 89        window.dialogArguments.var_id="001"//设置var_id变量
 90
 91        同样还可以对主窗口的任何对象进行操作,如form对象里的元素。
 92        window.dialogArguments.form1.index1.value="这是在设置index1元素的值"
 93
 94<script language="javascript">
 95        //用户登陆中转窗口
 96        //设置打开窗口的宽度和高度,并全屏显示
 97            var tWidth=window.screen .availWidth;
 98            var tHeight=window.screen .availHeight;
 99            
100            con=window.open("index.htm",null,"width="+tWidth+",height="+tHeight+",menubar=0,status=yes,scrollbars=1,titlebar=0,top=0,left=0,resizable=1,location=0");
101            window.opener=con;
102            window.close();
103            </script>

 

父窗口

 function OpenSelect()
                {
                  var srcFile="selecttree.aspx"; //新窗口的文档名称
                     var winFeatures="dialogWidth:150pt;dialogHeight:300pt;status:no;help:no;scroll:no;";
                    
                     var obj =form1;//将form作为对象传递给新窗口 (注意传递的为表单对象 ) 
                     window.showModelessDialog(srcFile,obj,winFeatures); //window.showModelessDialog(srcFile,obj,winFeatures)

                }
    </script>

 

 

 

子窗口:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="selecttree.aspx.cs" Inherits="WEB_Base_selecttree" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
    <script type="text/javascript" src="../../JS/Main.js"></script>

    <script type="text/javascript">
        loadCss(top._skinId,'Page.css');

    </script>
<script language="JavaScript">   
 function send(val)   
 {       
     //取得父窗口传过来的对象  <生成父窗口的对象>     
     var myObj = window.dialogArguments;       
     //赋值
     myObj.TextBox_lszd.value = val; //将文本框的内容复给父对象传过来的对象的对应的文本框1 其中的text1。text2 是在父窗口中声明的
    // myObj.Text2.value = val1; //将文本框的内容复给父对象传过来的对象的对应的文本框2
     //关闭窗口       
     window.close();   
 }
 </script>

</head>
<base target="_self"> <!--这句话非常重要,只要加上才能保证在弹出窗口中调用服务端代码而不会再弹出一个新窗口-->

<body>
    <form id="form1" runat="server">
    <div>
    <asp:TreeView ID="tvMenu" runat="server" ShowLines="True" ExpandDepth="1" ImageSet="XPFileExplorer" NodeIndent="15" OnSelectedNodeChanged="tvMenu_SelectedNodeChanged" >
           
            <ParentNodeStyle Font-Bold="False" />
            <HoverNodeStyle Font-Underline="True" ForeColor="#6666AA" />
            <SelectedNodeStyle BackColor="#B5B5B5" Font-Underline="False" HorizontalPadding="0px" VerticalPadding="0px" />
            <NodeStyle Font-Names="Tahoma" Font-Size="8pt" ForeColor="Black" HorizontalPadding="2px" NodeSpacing="0px" VerticalPadding="2px" />
        </asp:TreeView> 
       
    </div>
    </form>
</body>
</html>

.cs

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class WEB_Base_selecttree : System.Web.UI.Page
{
    Data.DataBase DB = new Data.DataBase();
    public string strsql = null;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            strsql = "select * from T_DIC_POLL_ATMO";
            DataTable dt = DB.GetTable(strsql);
            DataSet ds = new DataSet();
            ds.Tables.Add(dt);
            this.treenod(tvMenu.Nodes, "^", "POLL_NAME", "POLL_ID", "POLL_NAME", dt);
        }

    }
    public void treenod(TreeNodeCollection trnod, string patid, string nodename, string nodevalue, string url, DataTable nodtabl)//树的生成函数
    {
        try
        {
            string strmenupath = null;
            string strtitle = null;

            string noden = nodename;
            string nodev = nodevalue;
            string nurl = url;
            DataTable nodta = nodtabl;
            DataView trvi = new DataView();
            TreeNode nod;
            trvi.Table = nodta;
            //  trvi.RowFilter = "Subjection=" + patid;
            //   trvi.RowFilter = "Subjection=" + '" + patid + "';
            trvi.RowFilter = "Subjection ='" + patid + "'";


            foreach (DataRowView tt in trvi)
            {
                nod = new TreeNode();
                nod.Text = tt[nodename].ToString();  //Menu_Name
                nod.Value = tt[nodevalue].ToString();  //node_id
                //nod.NavigateUrl = tt[url].ToString();  //Menu_Path

                strtitle = tt[nodename].ToString();
                strmenupath = tt[url].ToString().Trim();//  ~/WEB/BASE/site_list.aspx
               // nod.NavigateUrl = "javascript:top.myTab.Cts('" + strtitle + "','" + strmenupath + "')";
                //  nod.ShowCheckBox = true;
                trnod.Add(nod);
                nod.ExpandAll();
                nod.CollapseAll();
                treenod(nod.ChildNodes, nod.Value.ToString(), noden, nodev, url, nodta);
            }
        }
        catch (Exception e)
        {
            throw new Exception("error" + e.Source.ToString() + "message" + e.Message.ToString());

        }
    }
    protected void tvMenu_SelectedNodeChanged(object sender, EventArgs e)
    {
        if (tvMenu.SelectedNode.Depth > 1)
        {
                    Page.RegisterStartupScript("ggg", "<script>send('"+tvMenu.SelectedNode.Text+"');</script>");
          
        }
    }
}

    <span style="color: #ff0000">&nbsp;*</span>&nbsp;隶属站点:</td>
                            <td style="width: 207px">
                               
                                <asp:TextBox ID="TextBox_lszd" runat="server"  onkeydown="if(event.keyCode==13)event.keyCode=9"></asp:TextBox>
                             
                               <input onclick="OpenSelect()" type="button" value="..." onkeydown="if(event.keyCode==13)event.keyCode=9" style="width: 31px">
                             
                             
                               </td>

原创粉丝点击