2011年9月22日 星期四

ASP.NET - 兩個網頁相互傳值

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#的範例。

沒有留言:

張貼留言