ASP.NET子頁面獲取父頁面的值

ASP.NET子頁面獲取父頁面的值

對於頁面間傳值有多種方法:

1. 最常見的就是用超連接或者是Response.Redirect方法從一個頁面轉到另一個頁面,這時候你在新頁面中要獲取父頁面中的值時,必須是從URL中傳值過來,也就是說使用Get方法傳值的。這樣傳值有以下缺點:
   a)所傳值必須跟在URL後面,這樣的數據不安全。
   b)由於URL的長度有限,所以傳的值也是有限的。
所以要想傳遞大量的數據,就必須用post來傳值。因此我們想到了第二種傳值的方式:

2. 用Server.transfer(URL) 來實現頁面的跳轉。
Server.transfer()與Response.Redirect最大的不同就是,Response.Redirect實際上就像在地址欄裏面重新輸入了要跳轉頁面的地址,所以他是不保存之前頁面的信息的。但是Server.transfer()完全不同,Server.transfer()就是像是在服務器端重新顯示你要轉到的頁面,但此前頁面的信息都還保存在服務器。因此在新的頁面上你仍可以得到之前頁面的值。在.net中可以使用PreviousPage來得到之前頁面的Page對象。這樣有了Page對象你就方便的可以得到該頁面上的任何值了。比如:我要找之前頁面上的ID=TextBox1的值,語句爲:

  1. ((TextBox)PreviousPage.FindControl("TextBox1")).Text 


但是上面的兩種方式都是轉到,之前的頁面就不顯示了。有的時候還有打開子窗口但是父窗口仍然存在的情況,就像我在講__postBack()方法中的那樣,子窗口是在父窗口中彈出來的。
讓子窗口從父窗口中彈出,很容易讓人想到的是用JAVAScript方法。
打開一個窗口的JAVAScript方法有兩種:window.open(); window.showdialog()
如果在使用這兩種方法打開的子窗口中獲取父窗口的值,當然也有兩種把值跟在URL之後傳過來和直接獲取父窗口的對象來取值。
對於第一種方法取值,很簡單。直接使用QueryString就可以取到了。但是如上面所說這種Get傳值的方式有缺點。
下面我們分別來討論下兩種方法分別通過獲取父頁面對象來取值得方法。
1. 使用window.open(url)來打開一個子窗口,在子窗口中獲取父窗口的對象其實很簡單,直接使用window.opener就可以得到父窗口的對象,我們也是用這個方法在子窗口中調用父窗口的__postBack()方法的。比如我要獲得父窗口中ID=“TextBox1”的textbox的值。代碼如下:

  1. <script language="javascript">  
  2.     var text = window.opener.document.getElementById("TextBox1").value;  
  3.     alert(text);  
  4. </script> 

2.使用window.showModalDialog()方法來彈出一個子窗口時,若想得到父窗口中的值,仍舊使用window.opener是得不到父窗口對象的。這裏我們就要在showModalDialog()方法中傳入window參數。然後在子窗口中得到這個代表父窗口的window,這樣就可以隨便操作父窗口中的值了。
腳本如下:
在父窗口中,假如我們是在服務器控件中調用javascript代碼的,你可以這樣寫:
Page.ClientScript.RegisterStartupScript(this.GetType(), "test", "window.showModalDialog('Default4.aspx',window)", true);
Default4.aspx就是子窗口的頁面。這裏要注意不能使用Page.ClientScript.RegisterClientScriptBlock()因爲Block方法會把該script腳本寫在所有控件的前面,這樣在頁面被加載時,TextBox1控件還沒有被加載,子窗口就打開了,所以在子窗口時取不到任何控件的值的。而RegisterStartupScript()方法正好相反,他是把對應Script腳本寫在所有控件的後面,所以子窗口能夠得到父窗口的任何控件的值。
如果你是在客戶端寫的JavaScript腳本,那就更簡單了

  1. <script language="javascript">  
  2.     function popwindow()  
  3.     ...{  
  4.         window.showModalDialog('Default4.aspx',window);  
  5.     }  
  6. </script> 


在子窗口中可寫入如下腳本:

 

  1. <script language="javascript">  
  2.        var vwin = window.dialogArguments; //得到window參數  
  3.         var doc = vwin.document.getElementById("TextBox1").value; //獲得TextBox的值  
  4.         alert(doc);  
  5. </script>  


轉載請註明來自: http://www.caodong.net/Article/625.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章