日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

怎樣在父窗口中獲得彈出的子窗口中的值!

 昵稱11448503 2013-05-06

以前做過一個(gè)項(xiàng)目中要求當(dāng)填寫聯(lián)系人的時(shí)候,點(diǎn)擊  一個(gè)按鈕后彈出一個(gè)子窗口,選中子窗口中的聯(lián)系人后,將選中的聯(lián)系人的值填充到父窗口來,當(dāng)時(shí)以為很簡(jiǎn)單,但一做起來就發(fā)現(xiàn)不是很好下手,最近,當(dāng)我看到一篇寫ASP.NET的回傳機(jī)制的文章后,終于有一點(diǎn)頭緒了,于是就做了一個(gè)類似的小例子,就是在一個(gè)窗口中點(diǎn)擊一個(gè)按鈕后彈出一個(gè)子窗口然后將選中的子窗口的值填充到父窗口的一個(gè)TextBox中,詳細(xì)說明如下:

1.首先是父窗口中我只定義了一個(gè)Button和一個(gè)TextBox,具體代碼如:(父窗口叫WebForm1.aspx)

下面是.aspx頁(yè)面上的代碼:

<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="Wtest.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
    <HEAD>
        <title>WebForm1</title>
        <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
        <meta content="C#" name="CODE_LANGUAGE">
        <meta content="JavaScript" name="vs_defaultClientScript">
        <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
        <script type="text/javascript">
          function OpenWindow()
          {
            window.open('test.aspx','','height=200,width=200,left=200,top=150,location=no,menubar=no,resizable=false,scrollbars=yes,status=no,titlebar=no,toolbar=no');
          }

          
          function init(userName)
          {
            __doPostBack("userName",userName);
          }

          function DisplayName(para)
          {
            document.getElementById('<%= TextBox1.ClientID%>').value = para;
          }

        </script>
    </HEAD>
    <body MS_POSITIONING="GridLayout">
        <form id="Form1" runat="server">
              <input id="Button1" style="Z-INDEX: 101; LEFT: 216px; POSITION: absolute; TOP: 152px" onclick="OpenWindow();"
                type="button" value="打開" name="btnOk" runat="server">
            <asp:TextBox id="TextBox1" style="Z-INDEX: 102; LEFT: 272px; POSITION: absolute; TOP: 152px"
                runat="server"></asp:TextBox></form>
    </body>
</HTML>

這個(gè)父窗口(WebForm1.aspx.cs)的后臺(tái)CS里面的代碼如下:

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace Wtest
{
    /// <summary>
    
/// WebForm1 的摘要說明。
    
/// </summary>

    public class WebForm1 : System.Web.UI.Page
    {
        protected System.Web.UI.HtmlControls.HtmlInputButton Button1;
        protected System.Web.UI.WebControls.TextBox TextBox1;
    
        private void Page_Load(object sender, System.EventArgs e)
        {
            // 在此處放置用戶代碼以初始化頁(yè)面
            if (Request["__EVENTTARGET"]=="userName")
            {
                string userName = Request["__EVENTARGUMENT"].ToString();
                Page.RegisterStartupScript("DisplayName","<script language='javascript'>DisplayName('"+ userName +"');</script>");
            }

        }


        Web 窗體設(shè)計(jì)器生成的代碼

        private void Button1_ServerClick(object sender, System.EventArgs e)
        {
        
        }

    }

}

 

2.然后就是彈出的子窗口的代碼(test.aspx):

首先是頁(yè)面上的代碼:

 

<%@ Page language="c#" Codebehind="test.aspx.cs" AutoEventWireup="false" Inherits="Wtest.test" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
    <HEAD>
        <title>test</title>
        <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
        <meta content="C#" name="CODE_LANGUAGE">
        <meta content="JavaScript" name="vs_defaultClientScript">
        <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
        <script type="text/javascript">
            function Close()
            {
                window.close();
                window.opener.focus();
                return false;
            }

            function setName(userName)
            {
                window.opener.init(userName);
                Close();
            }

        </script>
    </HEAD>
    <body MS_POSITIONING="GridLayout">
        <form id="Form1" method="post" runat="server">
            <table cellSpacing="0" cellPadding="0" width="95%" align="center">
                <tr>
                    <td align="center">
                        <table width="80%" border="1" cellpadding="0" cellspacing="0" bgcolor="#f6f6f6">
                            <tr>
                                <td height="60">
                                    <asp:listbox id="ListBox1" Width="100%" runat="server" Height="176px">
                                        <asp:ListItem Value="hekai">何凱</asp:ListItem>
                                        <asp:ListItem Value="wuyu">吳禹</asp:ListItem>
                                        <asp:ListItem Value="gaochao">高超</asp:ListItem>
                                        <asp:ListItem Value="zs">張松</asp:ListItem>
                                        <asp:ListItem Value="dc">蠹蟲</asp:ListItem>
                                        <asp:ListItem Value="zhouXX">周星星</asp:ListItem>
                                        <asp:ListItem Value="XiMu">西木</asp:ListItem>
                                    </asp:listbox></td>
                            </tr>
                        </table>
                    </td>
                </tr>
                <tr>
                    <td height="36" align="center">
                        <asp:button id="Button1" runat="server"
                            Text="確定"></asp:button>
                    </td>
                </tr>
            </table>
        </form>
    </body>
</HTML>

 

接著是該子窗口的后臺(tái)CS代碼:

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace Wtest
{
    /// <summary>
    
/// test 的摘要說明。
    
/// </summary>

    public class test : System.Web.UI.Page
    {
        protected System.Web.UI.WebControls.ListBox ListBox1;
        protected System.Web.UI.WebControls.Button Button1;
    
        private void Page_Load(object sender, System.EventArgs e)
        {
            // 在此處放置用戶代碼以初始化頁(yè)面
        }


        Web 窗體設(shè)計(jì)器生成的代碼

        private void Button1_Click(object sender, System.EventArgs e)
        {
            Page.RegisterStartupScript("SetLinkMan","<script language='javascript'>setName('"+ ListBox1.SelectedValue +"');</script>");
        }

    }

}

 

我再來詳細(xì)的說明一下上面的代碼的意思:

其實(shí)這個(gè)例子的原理是利用了ASP.NET的回發(fā)機(jī)制做的(doPostBack),我們找到,在一個(gè)aspx頁(yè)面中只要有回發(fā)

控件,則在生成了aspx頁(yè)面中產(chǎn)生出這樣子一段代碼:

 

<input type="hidden" name="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" value="" />

<script language="javascript" type="text/javascript">
<!--
    function __doPostBack(eventTarget, eventArgument) {
        var theform;
        if (window.navigator.appName.toLowerCase().indexOf("microsoft") > -1) {
            theform = document.Form1;
        }

        else {
            theform = document.forms["Form1"];
        }

        theform.__EVENTTARGET.value = eventTarget.split("$").join(":");
        theform.__EVENTARGUMENT.value = eventArgument;
        theform.submit();
    }

// -->
</script>

我們正是利用了這樣一個(gè)機(jī)制,來將彈出窗口的值傳回到父窗口中來,其實(shí)在子窗口中,我們只是

將獲取到的值利用window.opener.init("要傳送的值")這個(gè)方法將值發(fā)到父窗口中,但實(shí)際是回發(fā)后父窗口

并沒有馬上獲取到這個(gè)從其子窗口傳回來的值,在這里,我們是利用了一個(gè)__doPostBack()函數(shù)來讓

父窗口獲取得到這個(gè)值的,因?yàn)橹灰谢匕l(fā)操作發(fā)生,都會(huì)調(diào)用這個(gè)__doPostBack()函數(shù),正是利用

ASP.NET的這一機(jī)制,使我們可以獲取到從子窗口傳回來的值。

注意:我剛開始做的時(shí)候發(fā)現(xiàn)頁(yè)面上并沒有__doPostBack()這個(gè)方法,后來google一下才知道必須有

能夠觸發(fā)回發(fā)機(jī)制產(chǎn)生的控件才會(huì)產(chǎn)生該方法,我當(dāng)時(shí)的父窗口的Button是用的客戶端控件,所以

不會(huì)產(chǎn)生doPostBack函數(shù),因?yàn)榉?wù)器端的Button可以觸發(fā)回發(fā)產(chǎn)生,所以我讓這個(gè)Button的屬性

設(shè)置為runat='server',于是就可以產(chǎn)生回發(fā)了,但是如果你頁(yè)面上沒有button而你又想讓頁(yè)面回發(fā),其實(shí)

還有一種方法就是 將某個(gè)服務(wù)器控件的AutoPostBack設(shè)置為True就可以了,比如說一個(gè)TextBox想這樣

設(shè)置以后也可以產(chǎn)生回發(fā)。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多