天天看點

asp.net 父窗體擷取子窗體的傳回值,可用來對父窗體局部更新asp.net 父窗體擷取子窗體的傳回值,可用來對父窗體局部更新

今天在項目上遇到了這個問題,其實隻是window.returnValue的簡單應用,不是asp.net的專屬内容。作為積累,記錄一個簡單的實作模型。

圖1  用到的檔案

   從圖1中我們可以看到,隻用到了兩個頁面,其中Default.aspx作為父頁面,Default2.aspx作為子頁面被彈出。Default.aspx頁面上有兩個TextBox一個Button,代碼如下:

<a></a>

1 &lt;%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %&gt;

2

3 &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;

4

5 &lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;

6 &lt;head runat="server"&gt;

7 &lt;title&gt;&lt;/title&gt;

8

9 &lt;/head&gt;

10 &lt;body&gt;

11 &lt;form id="form1" runat="server"&gt;

12 &lt;div&gt;

13 &lt;asp:TextBox runat="server" ID="a1"&gt;

14 &lt;/asp:TextBox&gt;

15 &lt;asp:TextBox ID="TextBox1" runat="server" ontextchanged="TextBox1_TextChanged"&gt;&lt;/asp:TextBox&gt;

16 &lt;asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" /&gt;

17

18

19 &lt;/div&gt;

20

21 &lt;/form&gt;

22 &lt;/body&gt;

23 &lt;/html&gt;

24

在Button1的Click事件中,我們注冊彈窗腳本,代碼如下:

1 protected void Button1_Click(object sender, EventArgs e)

2 {

3 StringBuilder s = new StringBuilder();

4 s.Append("&lt;script language=javascript&gt;");

5 s.Append("var a=window.showModalDialog('Default2.aspx');");

6 s.Append("if(a!=null)");

7 s.Append("document.all('TextBox1').value=a;");

8 s.Append("&lt;/script&gt;");

9 Type cstype = this.GetType();

10 ClientScriptManager cs = Page.ClientScript;

11 string sname = "lt";

12 if (!cs.IsStartupScriptRegistered(cstype, sname))

13 cs.RegisterStartupScript(cstype, sname, s.ToString());

14 }

其中  s.Append("var a=window.showModalDialog('Default2.aspx');");一句用來彈窗Default2.aspx頁面并接收它的傳回值。

接收了傳回值之後我們把它指派給TextBox1.

 Default2.aspx頁面有一個TextBox和一個Button,代碼如下:

 (這裡需要注意的是在head裡的&lt;base target="_self" /&gt;标記十分重要。

1 &lt;%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %&gt;

6 &lt;head &gt;

8 &lt;base target="_self" /&gt;

10

11 &lt;body&gt;

12 &lt;form id="form1" runat="server"&gt;

13 &lt;div&gt;

14 &lt;asp:textbox runat="server" ID="t1"&gt;&lt;/asp:textbox&gt;

15 &lt;asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" /&gt;

16

17 &lt;/div&gt;

18 &lt;/form&gt;

19 &lt;/body&gt;

20 &lt;/html&gt;

21

我們在Default2.aspx頁面的Button_Click事件中使用腳本傳回一個值給父頁面。代碼如下:

1 protected void Button1_Click(object sender, EventArgs e)

4 s.Append("&lt;script language=javascript&gt;" + "\n");

5 s.Append("window.returnValue='" + this.GetSelectValue() + "';" + "\n");

6 s.Append("window.close();" + "\n");

7 s.Append("&lt;/script&gt;");

8 Type cstype = this.GetType();

9 ClientScriptManager cs = Page.ClientScript;

10 string csname = "ltype";

11 if (!cs.IsStartupScriptRegistered(cstype, csname))

12 cs.RegisterStartupScript(cstype, csname, s.ToString());

13

腳本注冊成功之後,我們可以做如下的實驗:

1)打開Default1.aspx頁面在id為a1的TextBox中輸入數字55,然後點選Button

2)在彈窗中輸入數字66再點子窗體的按鈕關閉子窗體。

3)檢視結果

從結果中,我們可以看出我們保留了先輸入到父窗體中的值,又接收了從子窗體傳遞過來的值。

本文轉自懸魂部落格園部落格,原文連結:http://www.cnblogs.com/xuanhun/archive/2010/03/08/1681089.html,如需轉載請自行聯系原作者

繼續閱讀