子頁面擷取父頁面的值收藏

來源:互聯網
上載者:User
前一陣子在搞__postBack的時候用過子頁面擷取父頁面方法,對於子頁面如果擷取父頁面的值則有好多種方法。
這好像又回到了頁面間傳值的問題。在這裡我順便理一下。

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

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的值,語句為:
((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的值。代碼如下:<script language="javascript">
    var text = window.opener.document.getElementById("TextBox1").value;
    alert(text);
</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指令碼,那就更簡單了<script language="javascript">
    function popwindow()
    ...{
        window.showModalDialog('Default4.aspx',window);
    }
</script>

在子視窗中可寫入如下指令碼:<script language="javascript">
       var vwin = window.dialogArguments; //得到window參數
        var doc = vwin.document.getElementById("TextBox1").value; //獲得TextBox的值
        alert(doc);
</script>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.