.net中修改位於UpdatePanel外的控制元件內容
時常有讀者詢問筆者一個問題,在UpdatePabel內所觸發的事件當中,是否可以動態的更新佈置在UpdatePanel "外的" 控制元件?
一般來說,我們使用UpdatePanel時可會這樣佈置:
平常時候我們會把 "需要以非同步方式動態更新" 的控制元件放在UpdatePanel裡,這時要更新畫面中的TextBox1很簡單,只需要編寫程式碼:
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
me.TextBox1.Text= " ... "
End Sub
在UpdatePanel當中的Button1所觸發的Click事件,會以非同步Postback的方式被執行,因此當後端事件Click被執行到,即可更新TextBox1中的值,且頁面不需要換頁(Submit)。
但是,您用UpdatePanel久了就會發現,我們不可能把所有的控制元件都放在UpdatePanel當中,如果需要在非同步Postback當中,動態更新UpdatePanel外的控制元件內容,該如何作呢? 例如:
當我們想點選UpdatePanel當中的Button之後,更新位於UpdatePanel外的控制元件的內容,則需要通過動態Render JavaScript的小技巧:
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim js As String
js = "$get('TextBox1').value='...';"
ScriptManager.RegisterStartupScript(Me, GetType(String), "", js, True)
End Sub
這樣就可以通過動態產生的JavaScript,來更新前端頁面上佈置於UpdatePanel外的控制元件。
其實這個小技巧相當好用,我們也可以用於在非同步Postback過程當中,動態的產生alert視窗,例如:
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim js As String
js = "alert('非同步postback過程當中產生的alert視窗...');"
ScriptManager.RegisterStartupScript(Me, GetType(String), "", js, True)
End Sub
以上 引用自
http://blog.csdn.net/dotnetwalker/archive/2007/11/07/1870893.aspx
但是如果把TextBox 換成 Label的話,單單把TextBox1換成 Label的Id是不行的。因為.net的Label控制元件在執行的時候會翻譯成Html語言的span控制元件,所以仍舊使用它的Value屬性來賦值是不對的。此時應該用Span的innerHTML屬性。語句如下:
js = "$get('Label1).innerHTML='...';"