ASP.NET AJAX入門系列
說明:ASP.NET AJAX v1.0 正式版發行,和以前測試版相比,功能略有改動,所以才覺得有必要寫
這篇文章,供大家參考。同時大部分內容仍然是參考 TerryLee's Tech Space。
——.學習ASP.NET AJAX 首先要知道 ASP.NET AJAX 組成部分
1.核心AJAX類型系統,2.網路通訊協定層(networking stack),3.組建模型,4.擴充基類(extender),5.Asp.net 整合的服務端功能(ScriptManager,UpdatePanel,Time 控制項) 。
——.對基本服務端功能控制項的使用
----------ScriptManager:
作用:處理頁面上所有組建以及頁面局部更新,產生相關的用戶端代理指令碼以便能夠在Javascript 中訪問WebServices
所有需要支援ASP.NET AJAX 的 ASP.NET 頁面有且只能有一個 ScriptManager控制項。在ScriptManager 控制項中可以指定需要的
指令碼庫,或者指定通過JS 來調用WebServices,以及調用 AuthenticationService 和 ProfileService,還有分頁錯誤處理等。
★注意:ASP.NET AJAX 不支援中文,目錄不能為中文
ASP.NET WEbServices 最好與頁面建在同一網站下,否則要添加引用System.WEb.Extensions,但是path 屬性我總是寫不對。
path="http://localhost:1543/WebSite1/WebService.asmx" 既然找不到。
---------ScriptManagerProxy:
由於一個aspx 頁面上只能有一個ScriptManager,所以在有主版頁面的情況下,如果需要在Mster-Page和Content-Page中需要
引用不同的指令碼時,這需要在Content-Page中適用ScriptManagerProxy,而不是ScriptManager。ScripyManager和ScripyManagerProxy是
兩個非常相似的控制項。
★注意:錯誤:1.The control with ID 'ScriptManagerProxy1' requires a ScriptManager on the page. The ScriptManager must appear before any controls that need it.
解決辦法: 將主版頁面中的ScriptManager 放在Content 上面
2.<asp:ScriptManagerProxy 元素不是已知元素。但仍然可以繼續運行。我是2007.11.1下載最新版的。
3.The Server Method ‘Add’failed with the following error;System.Exception -- 不是INt32 的有效值
解決辦法,主版頁面與子頁中控制項的名字,事件的名字最好不要一樣。
---------UpdatePanel:
建立豐富的局部更新Web應用程式,它是ASP.NET 2.0 AJAX Extensions 中很重要的一個控制項,其強大之處在於不用編寫任何用戶端指令碼,
只要在一個頁面上添加一個UpdatePanel控制項和一個ScripyManager控制項就可以實現局部更新。
ChildrenAsTriggers --當UpdateMode屬性為Conditional時,UpdatePanel中的子控制項的非同步回送是否會引發UpdatePanle的更新
UpdateMode---表示UpdatePanel的更新模式,有兩個選項:Always和Conditional。
★注意:我的理解:規則:如何一個UpdatePanel 的 UpdateMode 設定為Conditional,其他UpdatePanel裡面的控制項就無法更新他裡面的內容
即使嵌套UpdatePanel 外面的設定為Conditional,,但是裡面的沒有設定,仍然可以更新裡面的updatePanel.
但對於嵌套例外,不管裡面的updatepanel設定什麼屬性,外面updatepanel都可以更新裡面的,但是如果外面的updatepanel設定為Conditional,裡面的就無法跟新外面的。
--------UpdateProgress:
★注意:Sys 未定義,解決辦法,將 var par=Sys.WebForms.PageRequestManager.getInstance();放在 函數裡面
關於 某些情況下 UpdateProgress控制項將不會自動顯示,在正式版中已經解決了 。
-------- 自訂異常處理
★注意: 在服務端自訂異常處理 已經不能用了。
--------主版頁面中使用UpdatePanel
無非就是根據控制項ID ,尋找控制項,在ASP.NET 中我們用到很多了。
--------Time
在UpdatePanel控制項內單擊並雙擊Timer控制項添加到UpdatePanel中。Timer控制項可以作為UpdatePanel的觸發器不管是否在UpdatePanel中
但是放在外面就更新了真箇頁面,放在UpdatePanel就跟新UpdatePanel裡面的內容,不管UPdatePanel 的UPdateMode 設定為什麼屬性。
入門系列需要用到的痛點知識
1.var prm = Sys.WebForms.PageRequestManager.getInstance();
function CancelAsyncPostBack() {
if (prm.get_isInAsyncPostBack()) {
prm.abortPostBack();
}
}
2. 註冊 ScriptManager1.RegisterAsyncPostBackControl(Button1);
入門系列遺留下來的問題:
1.建立頁面的時候,需不需要選擇“將代碼放在單獨的檔案裡面,為什嗎?”
2.我初步瀏覽了一下全部文章,發現用到了大量的WebServices ,為什麼 ?
都說 asp.net ajax 有很多blug,今天我算是體驗到了。頁面上拖了3個文字框,有2個能通過 this.TextBox1 點出來,有一個卻點不出來。
然後我就 手寫 this.TextBox3.Text ,既然也可以用。只有這樣了。。。。
==========================================================================================
一 : ASP.NET AJAX 與搜尋引擎
今天研究了一下 AJAX 與搜尋引擎,做了一個小例子,覺得有必要記下來,供大家參考,
同時也希望大家多提寶貴意見。
首先用 ASP.NET AJAX 建了一個項目,頁面上有2個文字框,一個是 伺服器端控制項,一個
用戶端控制項,然後在頁面 onload的時候,給2個文字框賦值,頁面上出現相應的結果。
代碼如下: ...<body onload="load()">...
function load()
{
$get("Text1").value="測試客戶度登陸";
$get("TextBox1").value="測試伺服器登陸";
}
點擊查看源檔案:
<input name="TextBox1" type="text" id="TextBox1" style="width:85px;" />
<input id="Text1" style="width: 90px" type="text" />
2個文字框都是空的,也就是說對搜尋引擎是透明的。
然後在 Page_load事件 裡面,給伺服器端控制項賦值
<input name="TextBox1" type="text" value="登陸" id="TextBox1" style="width:85px;" /><br />
"登陸" 對搜尋引擎可見。
在頁面上再加個按鈕,分別給伺服器端文字框和用戶端文字框重新賦值。
點擊伺服器端按鈕,伺服器文字框值改變了,但是用戶端文字框的值被清空了。反而就不會。
同時發現,文字框的值為 初始化的值,即使說點擊按鈕之後,並沒有把值寫入用戶端,搜尋引擎找到的就是頁面初始化的值。
對分頁來說,簡直就是當頭一棒。
但總的來說,頁面初始化留給我們一線機會。