ASP.NET自訂控制項開發樣本(二)

來源:互聯網
上載者:User

接著上次的內容。接下來我們讓它的時間能不停走動。建立一個類TipTime3,建立指令檔TipTime3.js,將TipTime2代碼都複製過來。
為了能將C#的DateTime對象轉換為JS的Date,需要將該時間距離1970-1-1午夜的毫秒數傳給JS。

剩下的工作就是利用setInterval每隔1秒改變span標籤的文本,略過。

下一步要實現利用AJAX擷取服務端的時間。先要讓控制項實現ICallbackEventHandler介面。

該介面包含2個方法。 RaiseCallbackEvent用於處理用戶端傳遞過來的參數,這裡不需要,所以空著。 GetCallbackResult用於處理返回給用戶端的資料,
這裡為了使效果明顯,返回了一個隨機時間。
注意要在OnLoad方法中需要加上這一行:
Page.ClientScript.GetCallbackEventReference(this, "", "", "");
這樣做是為了保證頁面上產生了WebForm_DoCallback方法。
剩下的工作就是用戶端去調用了。WebForm_DoCallback方法的參數說明依次為:
需要回調的控制項的UniqueID
回調的參數
回調結束後用戶端的響應事件
回調的上下文
回調出錯後用戶端的響應事件
是否非同步

接著給按鈕添加onclick事件,調用WebForm_DoCallback方法,在回調結束後的響應事件中將結果顯示在span標籤上就行了。
這時我們發現如果頁面回傳了,控制項的位置就會回到原來的位置,因此需要在每次拖動結束後將位置儲存在<input type=“hidden”/>標籤中。
建立一個類TipTime4,建立指令檔TipTime4.js,將TipTime3代碼都複製過來。
建立兩個屬性X,Y用來儲存控制項在用戶端的座標,並在RenderContents方法中輸出一個Input標籤,保證用戶端的座標資訊在回傳時還存在。

注意這裡對屬性X,Y沒有用ViewState儲存,是因為這2兩個值是存在於表單資料中,這個與TextBox控制項的Text屬性類似。
對上面的input標籤一定要設定name屬性,不然是不會隨著表單提交的。
為了能讓在回傳後擷取input標籤的值,需要讓控制項實現IPostBackDataHandler介面

LoadPostData方法用來檢查提交給伺服器的資料,根據控制項狀態資料和回傳資料是否發生更改而判斷是否調用RaisePostDataChangedEvent方法,
如果返回true,則.NET Framework會自動調用RaisePostDataChangedEvent方法,在此方法中可以引發自己定義的事件。
這裡只將回傳資料存放區到X,Y屬性中。
接下來要在OnLoad事件中加上
Page.RegisterRequiresPostBack(this);
這是為了保證在回傳時觸發IPostBackDataHandler介面。
然後在AddAttributesToRender方法中設定控制項的left、right屬性:
 

最後在JS中拖動結束時將控制項的座標存入input標籤中即可。

最後要加的功能是到了一個時間,自動回傳觸發自訂事件。建立一個類TipTime,建立指令檔TipTime.js
將TipTime4代碼都複製過來。先加一個屬性,用來儲存配置的定時時間:

 

接著定義自訂事件。這上面的寫法都是固定的寫法。這樣在設計檢視就能看到該事件了

 然後實現IPostBackEventHandler介面

在條件成立時,就執行自訂事件。
下一步在JS中判斷是否到時間了,如果是則調用__doPostBack方法來實現回傳,並將控制項的UniqueID作為參數傳遞過去,
這樣服務端才能知道是哪個控制項觸發的回傳事件。
 

需要注意的是必須在OnLoad方法中加上:
Page.ClientScript.GetPostBackEventReference(new PostBackOptions(this));
這樣頁面上才會有__doPostBack方法,並且才會觸發IPostBackEventHandler介面。
至此,所有功能都實現了。

範例程式碼下載
ASP.NET自訂控制項開發樣本(一)

相關文章

聯繫我們

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

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

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.