现在的位置: 首页 > 综合 > 正文

撰寫自用 Confirm 方法

2014年03月09日 ⁄ 综合 ⁄ 共 6765字 ⁄ 字号 评论关闭

转载出处:http://blog.blueshop.com.tw/jeff377/archive/2008/08/29/56860.aspx

我們將使用「撰寫自用的 ScriptManager 來管理用戶端指令碼」文中提及的 TBScriptManager 類別為基礎,在 TBScriptManager 類別新增處理「詢問訊息」會使用到相關方法。我們在 TBScriptManager 類別新增二個 GetConfirmScript 多載方法,用以取得詢問訊息相關的 JavaScript 程式碼;另新增 Confirm 方法來直接註冊詢問訊息的用戶端指令碼,以下將以實例說明這三個方法的使用時機及方式。

1 ''' <summary>  
2 ''' 用戶端指令碼管理。  
3 ''' </summary>  
4 Public Class TBScriptManager  
5  
6     ''' <summary>  
7     ''' 處理訊息文字的跳脫字元。  
8     ''' </summary>  
9     ''' <param name="Message">訊息文字。</param>  
10     Private Function ParserMessage(ByVal Message As StringAs String 
11         Dim sMessage As String 
12  
13         sMessage = Strings.Replace(Message, "'""/'") '處理單引號  
14         sMessage = Strings.Replace(sMessage, vbNewLine, "/n"'處理換行  
15         Return sMessage  
16     End Function 
17  
18     ''' <summary>  
19     ''' 取得訊問視窗的用戶端指令碼。  
20     ''' </summary>  
21     ''' <param name="Message">訊息文字。</param>  
22     Public Overloads Function GetConfirmScript(ByVal Message As StringAs String 
23         Dim sMessage As String 
24         Dim sScript As String 
25  
26         sMessage = ParserMessage(Message)  
27         sScript = String.Format("if (confirm('{0}')==false) {{return false;}}", sMessage)  
28         Return sScript  
29     End Function 
30  
31     ''' <summary>  
32     ''' 取得訊問視窗的用戶端指令碼。  
33     ''' </summary>  
34     ''' <param name="Message">訊息文字。</param>  
35     ''' <param name="TrueScript">回應 true 時要執行的用戶端指令碼。</param>  
36     ''' <param name="FalseScript">回應 false 時要執行的用戶端指令碼。</param>  
37     Public Overloads Function GetConfirmScript(ByVal Message As String, _  
38         ByVal TrueScript As StringByVal FalseScript As StringAs String 
39         Dim sMessage As String 
40         Dim sScript As String 
41  
42         sMessage = ParserMessage(Message)  
43         sScript = String.Format("if (confirm('{0}')){{ {1} }} else {{ {2} }}", sMessage, TrueScript, FalseScript)  
44         Return sScript  
45     End Function 
46  
47     ''' <summary>  
48     ''' 詢問視窗。  
49     ''' </summary>  
50     ''' <param name="Message">訊息文字。</param>  
51     ''' <param name="TrueScript">回應 true 時要執行的用戶端指令碼。</param>  
52     ''' <param name="FalseScript">回應 false 時要執行的用戶端指令碼。</param>  
53     Public Sub Confirm(ByVal Message As StringByVal TrueScript As StringByVal FalseScript As String)  
54         Dim sScript As String 
55  
56         sScript = GetConfirmScript(Message, TrueScript, FalseScript)  
57         Me.RegisterStartupScript("Confirm", sScript)  
58     End Sub 
59  
60 End Class 

案例一:按鈕加上詢問訊息,按「確定」才會引發按鈕的 Click 事件

按鈕加上詢息訊息是常使用到的案例,例如按下刪除鈕時,先詢問用戶是否確定刪除資料,當按「確定」時才會真正去執行刪除動作。我們可以在 Page Load 事件中,去設定 Button.OnClientClick 屬性,加入詢問訊息的用戶端指令碼。

1 Protected Sub Page_Load(ByVal sender As ObjectByVal e As System.EventArgs) Handles Me.Load  
2     Button1.OnClientClick = Me.BeeScript.GetConfirmScript("確定刪除此筆資料嗎?")  
3 End Sub 

案例二:純用戶端的詢問訊息

詢問訊息只是在用戶端執行,並不會產生 PostBack。

1 Protected Sub Page_Load(ByVal sender As ObjectByVal e As System.EventArgs) Handles Me.Load  
2     Dim sScript As String 
3  
4     sScript = Me.BeeScript.GetConfirmScript("純用戶端的詢問訊息?""alert('按了確定')""alert('按了取消')")  
5     HyperLink1.Attributes("onclick") = sScript  
6 End Sub 

案例三:先執行伺服端程式再彈出詢問訊息,依用戶端回應再接續執行

例如有登打請假單儲存時,執行儲存完畢要彈出一個是否送審詢問訊息。在 WinForm 撰寫這個程式碼非常單純,只要在儲存後彈出詢問訊息,等待用戶回應接續執行後面的程式碼即可。可是在 WebForm 要撰寫相同的功能就有點麻煩了,因為整個程式的流程是在伺服端及用戶端交互運作。

請假單儲存(伺服端) -> 彈出詢問訊息(用戶端) -> 取得用戶端回應決定是否送審(伺服端)

在 WebForm 要處理這類問題,要分為二個階段處理,第一個階段處理「請假單儲存(伺服端) -> 彈出詢問訊息(用戶端) 」,在下面的程式碼中,訊問訊息的回應結果無論是「確定」或「取消」都會產生 PostBack 動作傳不同的參數。

1 Protected Sub btnSave_Click(ByVal sender As ObjectByVal e As System.EventArgs) Handles btnSave.Click  
2     Dim sTrueScript As String 
3     Dim sFalseScript As String 
4  
5     '執行請假單儲存的程式碼  
6  
7     '儲存完成彈出詢問訊息,__EVENTTARGET 設為 "SaveConfirm"  
8     sTrueScript = "__doPostBack('SaveConfirm','True')" 
9     sFalseScript = "__doPostBack('SaveConfirm','False')" 
10     Me.BeeScript.Confirm("假單要送審嗎?", sTrueScript, sFalseScript)  
11 End Sub 

第二階段在 Page Load 事件處理用戶端詢問訊息的回應「取得用戶端回應決定是否送審(伺服端)」

1 Protected Sub Page_Load(ByVal sender As ObjectByVal e As System.EventArgs) Handles Me.Load  
2     '處理詢問訊息的回應  
3     Dim sEventTarget As String = Me.Request.Form("__EVENTTARGET")  
4     Dim sEventArgument As String = Me.Request.Form("__EVENTARGUMENT")  
5     If String.Equals("SaveConfirm", sEventTarget, StringComparison.CurrentCultureIgnoreCase) Then 
6         If String.Equals(sEventArgument, "True", StringComparison.CurrentCultureIgnoreCase) Then 
7             '按了確定要執行的程式碼  
8         End If 
9  
10         If String.Equals(sEventArgument, "False", StringComparison.CurrentCultureIgnoreCase) Then 
11             '按了取消要執行的程式碼  
12         End If 
13     End If 
14 End Sub 

抱歉!评论已关闭.