小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

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

 昵稱11448503 2013-05-06

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

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

下面是.aspx頁面上的代碼:

<%@ 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>

這個父窗口(WebForm1.aspx.cs)的后臺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)
        {
            // 在此處放置用戶代碼以初始化頁面
            if (Request["__EVENTTARGET"]=="userName")
            {
                string userName = Request["__EVENTARGUMENT"].ToString();
                Page.RegisterStartupScript("DisplayName","<script language='javascript'>DisplayName('"+ userName +"');</script>");
            }

        }


        Web 窗體設計器生成的代碼

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

    }

}

 

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

首先是頁面上的代碼:

 

<%@ 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>

 

接著是該子窗口的后臺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)
        {
            // 在此處放置用戶代碼以初始化頁面
        }


        Web 窗體設計器生成的代碼

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

    }

}

 

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

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

控件,則在生成了aspx頁面中產生出這樣子一段代碼:

 

<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>

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

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

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

父窗口獲取得到這個值的,因為只要有回發(fā)操作發(fā)生,都會調用這個__doPostBack()函數(shù),正是利用

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

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

能夠觸發(fā)回發(fā)機制產生的控件才會產生該方法,我當時的父窗口的Button是用的客戶端控件,所以

不會產生doPostBack函數(shù),因為服務器端的Button可以觸發(fā)回發(fā)產生,所以我讓這個Button的屬性

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

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

設置以后也可以產生回發(fā)。

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多