ASP.NET拾萃——伺服器端控制項篇(二)

來源:互聯網
上載者:User

經常在網上看到類似的問題:如何讓ASP.NET伺服器端控制項響應用戶端事件?

ASP.NET伺服器端控制項能夠響應伺服器端事件,使我們能夠像編寫Windows程式一樣編寫網頁。可有時我們並不需要讓用戶端啟動並執行控制項和伺服器發生互動,這樣做的開銷是很大的:不僅佔用網路頻寬、伺服器的CPU資源,還會產生一次PostBack導致用戶端瀏覽器“重新整理”影響介面效果。
如果直接在Web表單的HTML代碼內為伺服器端控制項添加用戶端事件代碼,就像這樣:
<asp:Button id="Button1" Text="按鈕1"/>

你會發現,當按下這個按鈕時,並沒有預定的訊息框彈出,而是直接執行伺服器端代碼內的響應按鈕按下事件的Button1_Click方法(假設我們已經為按鈕綁定了這個事件)。如果查看用戶端頁面的原始碼,按鈕的onClick事件裡,根本沒有自己寫的代碼,卻變成了"javascript:__doPostBack(...)"。

其實這正是.NET Framework轉換工作的一部分。有了這個"javascript:__doPostBack(...)",才能實現按鈕提交、伺服器端響應事件等一系列動作。(關於這段自動加上的指令碼,我會在今後的文章裡詳細說明。)

想要控制項在用戶端就響應事件,必須另尋他法。好在.NET已經為我們提供了豐富的介面去實現這些功能。

所有的伺服器端控制項(Button、Label、TextBox……)都有一個屬性Attributes——這是一個很重要的屬性,它是伺服器端控制項在用戶端對應HTML元素屬性及事件的集合。有了它,我們能夠自訂伺服器端控制項在用戶端的行為、外觀。

還是剛才的Button1,這次我們在Page_Load事件裡加上這麼一句(在IsPostBack判斷之外):
Button1.Attributes.Add("onclick", "window.alert('按鈕被按下了')");

重建項目之後再次瀏覽頁面,這次我們終於能夠看到“按鈕被按下”的訊息框被正常彈出了。
回過頭來解釋這句代碼:Attributes是Button1也是所有伺服器端控制項擁有的屬性,Add(...)是Attributes所屬的一個方法,作用是為控制項在用戶端的HTML標記內添加代碼,第一個參數是屬性的名稱,第二個參數是屬性的值。在這裡我們為按鈕的onclick事件添加了一段彈出訊息框的代碼。在用戶端查看頁面原始碼,可以看到按鈕的onclick事件裡包含了這段代碼(.NET Framework自動產生的"__doPostBack(...)"就跟在後面,我們使用Add就是告訴.NET Framework:“先加入我們的代碼!”)。

Attributes還有另一種訪問的形式(C#專用):
Button1.Attributes["onclick"] = "window.alert('按鈕被按下了')"; // []內是屬性的名稱,等號右邊就是屬性的值

這個方法同樣可以用於使用伺服器端代碼為控制項改變屬性:
Button1.Attributes["style"] = "fontsize: 9pt"; // 改變控制項樣式的字型為9磅


 
 



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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