分享內容(
三、實作 IPostBackEventHandler 介面
實作 IPostBackEventHandler 介面,當選單項目產生 PostBack 動作後,在 RaisePostBackEvent 方法中,取得選單項目的鍵值 (eventArgument 參數),並引發 Click 事件。
四、實作 ICallbackEventHandler 介面
實作 ICallbackEventHandler 介面,當選單項目產生 CallBack 動作後,會先執行 RaiseCallbackEvent 方法,在此方法接收用戶端傳入的鍵值 (eventArgument 參數),並引發 Click 事件,最後會將 ClickEventArgs.CallbackResult 的結果回傳到用戶端,由用戶端指定的事件處理常式,來處理伺服器回傳的結果。
五、輸出選單項目的用戶端指令碼
在 Render 方法中,會有一段輸出程式碼來輸出每個選單項目的用戶端指令碼;其中會透過 GetItemClientScritp 私有方法,取得指定選單項目的用戶端指令碼。
GetItemClientScritp 私有方法程式碼如下,會判斷 TBMenuItem 是否設定 AutoPostBack、AutoCallBack 或 OnClientClick 屬性,來決定用戶端選單項目 Click 動作的行為。
[超過字數限制,下一篇接續本文]
9人
程式碼下載:ASP.NET Server Control - Day31.rar
一、AutoPostBack 及 AutoCallBack 屬性
TBMenuItem 類別原有個 OnClientClick 屬性,設定要執行的用戶端指令碼;此為用戶端的的 Click 動作,執行指定的 JavaScript 指令碼。我們在 TBMenuItem 屬性新增 AutoPostBack 及 AutoCallBack 屬性,分別用來設定選單項目的 PostBack 及 CallBack 動作。另外 ClientCallBack 為執行 CallBack 時,會接收成功的伺服器事件結果的用戶端事件處理常式名稱。
![]()
二、新增 Click 事件
TBContextMenu 新增 Click 事件及 ClickEventArgs 事件引數類別,ClickEventArgs 類別包含 Key 屬性表示按鈕鍵值,CallBackResult 屬性保留給 CallBack 使用。
''' <summary>
''' Click 事件引數。
''' </summary>
Public Class ClickEventArgs
Inherits System.EventArgs
Private FKey As String = String.Empty
Private FCallbackResult As String = String.Empty
''' <summary>
''' 鍵值。
''' </summary>
Public Property Key() As String
Get
Return FKey
End Get
Set(ByVal value As String)
FKey = value
End Set
End Property
''' <summary>
''' 執行 CallBack 回傳結果。
''' </summary>
Public Property CallbackResult() As String
Get
Return FCallbackResult
End Get
Set(ByVal value As String)
FCallbackResult = value
End Set
End Property
End Class
''' <summary>
''' 按下選單所引發的事件。
''' </summary>
< _
Description("按下選單所引發的事件。") _
> _
Public Event Click(ByVal sender As Object, ByVal e As ClickEventArgs)
''' <summary>
''' 引發 Click 事件。
''' </summary>
Protected Overridable Sub OnClick(ByVal e As ClickEventArgs)
RaiseEvent Click(Me, e)
End Sub
三、實作 IPostBackEventHandler 介面
實作 IPostBackEventHandler 介面,當選單項目產生 PostBack 動作後,在 RaisePostBackEvent 方法中,取得選單項目的鍵值 (eventArgument 參數),並引發 Click 事件。
Public Sub RaisePostBackEvent(ByVal eventArgument As String) Implements IPostBackEventHandler.RaisePostBackEvent
Dim oEventArgs As ClickEventArgs
oEventArgs = New ClickEventArgs()
oEventArgs.Key = eventArgument
Me.OnClick(oEventArgs)
End Sub
四、實作 ICallbackEventHandler 介面
實作 ICallbackEventHandler 介面,當選單項目產生 CallBack 動作後,會先執行 RaiseCallbackEvent 方法,在此方法接收用戶端傳入的鍵值 (eventArgument 參數),並引發 Click 事件,最後會將 ClickEventArgs.CallbackResult 的結果回傳到用戶端,由用戶端指定的事件處理常式,來處理伺服器回傳的結果。
Public Function GetCallbackResult() As String Implements ICallbackEventHandler.GetCallbackResult
Return FCallbackResult
End Function
Public Sub RaiseCallbackEvent(ByVal eventArgument As String) Implements ICallbackEventHandler.RaiseCallbackEvent
Dim oEventArgs As ClickEventArgs
oEventArgs = New ClickEventArgs()
oEventArgs.Key = eventArgument
Me.OnClick(oEventArgs)
FCallbackResult = oEventArgs.CallbackResult
End Sub
五、輸出選單項目的用戶端指令碼
在 Render 方法中,會有一段輸出程式碼來輸出每個選單項目的用戶端指令碼;其中會透過 GetItemClientScritp 私有方法,取得指定選單項目的用戶端指令碼。
For Each oItem In Me.Items
sClientClick = GetItemClientScript(oItem)
If StrIsNotEmpty(sClientClick) Then
If bFlag Then
oScript.AppendLine(",")
End If
oScript.AppendLine("'" & oItem.Key & "': function(t) {")
oScript.AppendLine(sClientClick)
oScript.AppendLine("}")
bFlag = True
End If
Next
GetItemClientScritp 私有方法程式碼如下,會判斷 TBMenuItem 是否設定 AutoPostBack、AutoCallBack 或 OnClientClick 屬性,來決定用戶端選單項目 Click 動作的行為。
Private Function GetItemClientScript(ByVal Item As TBMenuItem) As String
Dim sScript As String
If Item.AutoPostBack Then
sScript = Me.Page.ClientScript.GetPostBackEventReference(Me, Item.Key) & ";"
ElseIf Item.AutoCallBack Then
sScript = Me.Page.ClientScript.GetCallbackEventReference(Me, "'" & Item.Key & "'", Item.ClientCallBack, "''") & ";"
ElseIf StrIsNotEmpty(Item.OnClientClick) Then
sScript = Item.OnClientClick
Else
sScript = String.Empty
End If
Return sScript
End Function
[超過字數限制,下一篇接續本文]
▼ ADVERTISEMENT ▼
-
‧
-
‧
-
‧
相關問答
- [ASP.NET 控制項實作 Day1] 建立 ASP.NET 伺服器控制項專案
- [ASP.NET 控制項實作 Day2] 建立第一個伺服器控制項
- 鐵人賽的疑問?
- [ASP.NET 控制項實作 Day11] ActiveX 伺服器控制項
- [ASP.NET 控制項實作 Day3] 擴展現有伺服器控制項功能
- 最後一天 -- 鐵人賽對我的意義!!!
- 收到鐵人賽的T-shirt啦~~ (有圖有真相)
- [ASP.NET 控制項實作 Day9] 控制項常用 Attribute 介紹(2)
- [ASP.NET 控制項實作 Day4] 複合控制項
- [ASP.NET 控制項實作 Day10] Media Player 控制項
- [ASP.NET 控制項實作 Day30] 整合 jQuery ContextMenu 的右鍵選單控制項
- [ASP.NET 控制項實作 Day19] 控制項設計階段的外觀
- [ASP.NET 控制項實作 Day7] 設定工具箱的控制項圖示
- [ASP.NET 控制項實作 Day27] 控制項依 FormView CurrentMode 自行設定狀態
- 第一屆iT邦幫忙鐵人賽早鳥獎與鐵人鍊成獎得獎名單
- 小財神來報告一下鐵人賽豐富的獎品與參賽報法囉
- [ASP.NET 控制項實作 Day5] 屬性與 ViewState
- [ASP.NET 控制項實作 Day8] 控制項常用 Attribute 介紹(1)
- [ASP.NET 控制項實作 Day17] 集合屬性包含不同型別的成員
- [ASP.NET 控制項實作 Day26] 讓你的 GridView 與眾不同









