http://blog.xuite.net/sugopili/computerblog/13078151
方法:利用 FindControl取得物件的ClientID,將ClientID當做網頁參數傳給另一網頁(B),透過 javascript將值傳回給原網頁(A)。
A網頁部份內容(Wizard物件上有一個TextBox名為「TextBox1」,一個ImageButton名為「imagebutton1」):
Dim txtb1 As TextBox = CType(Wizard1.FindControl("TextBox1"), TextBox)
'設定ImageButton的onclick動作會開啟B網頁
Imagebutton1.Attributes("onclick") = "window.open('xxx.aspx?TextName=" & txtb1.ClientID.ToString & "','','height=600,width=800,menubar=no,location=no');"
'使用Attributes("onclick")缺點在於註冊後無法動態傳值。
'或 可以動態傳值
' poi="<script>window.open(如上參數) <script>"
' Response.Write(poi)
B網頁部份內容:透過javascript將123值傳回給A網頁中TextBox1.Text,並關閉B網頁。
Dim ClientID_TXTB1 As String = Request.QueryString("TextName").ToString()
Dim poi= New System.Text.StringBuilder("")
poi.Append("window.opener.document.getElementById('" & ClientID_TXTB1 & "').value='" & 123 & "';")
poi.Append("window.close();")
ClientScript.RegisterStartupScript(Me.GetType(), "ReturnValue", poi.ToString(), True)
透過〔getElementById('XXX').value=xxx〕方式設定網頁中物件之值,有某些限制:
1. TextBox:Enabled屬性需為True、ReadOnly屬性需為False,否則畫面看得到,但抓不到設定值
2009/02/03新增:
在 Page_PreRender中,對 TextBox的 ReadOnly屬性設為 True,則 ASP.NET可以抓到 TextBox設定值,又可以不讓使用者輸入,其範例如下:
Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender
XXX.Attributes.Add("readonly", "true")
End Sub
2. Label:改用〔getElementById('XXX').innerHTML=xxx〕方式,但會抓不到設定值,並且再次選擇時,畫面會自動不見。
其實〔兩個網頁相互傳值〕還有其它方法,以下是網路上常用到的方式:
(1)Asp.net WebForm頁面間傳值方法
Asp.net為我們提供了三種方式,一種是可以通過用querystring來傳送相應的值, 再一種是通過session變量來傳送相應的值,還有就是通過server.transfer方法來實現。
(2)ASP.NET Popup Windows With Return Values Redux:有C#的範例。
沒有留言:
張貼留言