2010-07-17 384 views
0

當人們想要純粹在客戶端執行某些操作時,或者想要以回發無法處理的方式向服務器發送某些內容時,會使用JavaScript。

但是在Visual Studio 2008中控件ASP.NET C#我看到當瀏覽器中顯示頁面時,控件即GridView,FormView和LINKBUTTON(!)在光標懸停在它們上時都顯示這個javascript:thing 。爲什麼?

回發仍然發生。甚至linkbutton都有這個JavaScript的東西,每當你點擊它,就會發生完整的回傳。

更改label.text等也是在頁面加載事件!

  • 爲什麼JavaScript?爲什麼不是簡單的按鈕?爲什麼linkbutton?

回答

0

ASP.NET是無狀態的。也就是說,每次請求頁面時,服務器都會構造整個頁面及其控件狀態,然後響應請求。然後呈現適當的HTML標記作爲對請求的響應。

對於任何控件,如果將autopostback屬性設置爲true,則如果控件導致回發(如單擊鏈接按鈕),則將頁面回發回服務器。

ASP.NET如何回發頁面? 它使用稱爲_doPostBack()的JavaScript函數完成它。功能是 -

function __doPostBack(eventTarget, eventArgument) { 
if (!theForm.onsubmit || (theForm.onsubmit() != false)) { 
    theForm.__EVENTTARGET.value = eventTarget; 
    theForm.__EVENTARGUMENT.value = eventArgument; 
    theForm.submit(); 
} 

此功能用於將表單提交回服務器。 _doPostBack通過使用隱藏變量__EVENTTARGET和__EVENTARGUMENT接受參數 - 事件目標和事件參數。這會告訴服務器哪個控件導致了回發,並將合適的參數傳遞給服務器。

,如果你有這樣的代碼在你的aspx頁面 -

相應產生的標記會 -

<a id="LinkButton1" href="javascript:__doPostBack('lnkButton','')">LinkButton</a> 

所以,說你點擊一個鏈接按鈕,頁面回發的__doPostBack()函數。然後,該頁面在服務器上以頁面上的相應控制狀態重新創建。使用viewstate等頁面機制獲取每個控件的狀態。一旦加載頁面,服務器就會計算並呈現響應標記。

1

在這種情況下,JavaScript調用可用於向服務器發送附加數據,例如,保存網格的一些客戶端數據(如調整大小的列的寬度或類似的東西)。 服務器端框架使用這種方法允許服務器端的人生成所有的客戶端代碼。這是一種quick'n'dirty解決方案(與組織良好的不顯眼的JavaScript比較)。