Skip Navigation Links
技术文档
·网站建设
·软件使用
·图形设计
·程序开发
·网络应用
·电脑技巧
 
公司介绍
·公司简介
·索仕SRCOS网络应用平台
·索仕网站管理系统
·影视广告制作
·联系我们
 
 

撰写自用 Confirm 方法

8/1/2008 5:10:01 PM

前言
上一篇「让 ASP.NET 也可以使用 MsgBox 方法」文章中提到如何封装 JavaScript 的 alert 方法,另一个常使用在客户端处理「询问讯息」的就是 JavaScript 的 confirm 方法,在此篇文章我们将撰写自用的 Confirm 方法,使页面的程序代码尽量不要直接去撰写 JavaScript 程序代码,以增加系统的维护性。


程序实作
我们将使用「撰写自用的 ScriptManager 来管理客户端指令码」文中提及的 TBScriptManager 类别为基础,在 TBScriptManager 类别新增处理「询问讯息」会使用到相关方法。我们在 TBScriptManager 类别新增二个 GetConfirmScript 多载方法,用以取得询问讯息相关的 JavaScript 程序代码;另新增 Confirm 方法来直接注册询问讯息的客户端指令码,以下将以实例说明这三个方法的使用时机及方式。

 

''' <summary>
撰写自用 Confirm 方法
''' 客户端指令码管理。
撰写自用 Confirm 方法
''' </summary>

Public Class TBScriptManager
撰写自用 Confirm 方法
    
''' <summary>
撰写自用 Confirm 方法    
''' 处理消息正文的跳脱字符。
撰写自用 Confirm 方法    
''' </summary>
撰写自用 Confirm 方法    
''' <param name="Message">消息正文。</param>

    Private Function ParserMessage(ByVal Message As StringAs String
撰写自用 Confirm 方法        
Dim sMessage As String
撰写自用 Confirm 方法
撰写自用 Confirm 方法        sMessage 
= Strings.Replace(Message, "'""\'"'处理单引号
撰写自用 Confirm 方法
        sMessage = Strings.Replace(sMessage, vbNewLine, "\n"'处理换行
撰写自用 Confirm 方法
        Return sMessage
撰写自用 Confirm 方法    
End Function

撰写自用 Confirm 方法
    
''' <summary>
撰写自用 Confirm 方法    
''' 取得讯问窗口的客户端指令码。
撰写自用 Confirm 方法    
''' </summary>
撰写自用 Confirm 方法    
''' <param name="Message">消息正文。</param>

    Public Overloads Function GetConfirmScript(ByVal Message As StringAs String
撰写自用 Confirm 方法        
Dim sMessage As String
撰写自用 Confirm 方法        
Dim sScript As String
撰写自用 Confirm 方法
撰写自用 Confirm 方法        sMessage 
= ParserMessage(Message)
撰写自用 Confirm 方法        sScript 
= String.Format("if (confirm('{0}')==false) {{return false;}}", sMessage)
撰写自用 Confirm 方法        
Return sScript
撰写自用 Confirm 方法    
End Function

撰写自用 Confirm 方法
    
''' <summary>
撰写自用 Confirm 方法    
''' 取得讯问窗口的客户端指令码。
撰写自用 Confirm 方法    
''' </summary>
撰写自用 Confirm 方法    
''' <param name="Message">消息正文。</param>
撰写自用 Confirm 方法    
''' <param name="TrueScript">响应 true 时要执行的客户端指令码。</param>
撰写自用 Confirm 方法    
''' <param name="FalseScript">响应 false 时要执行的客户端指令码。</param>

    Public Overloads Function GetConfirmScript(ByVal Message As String, _
撰写自用 Confirm 方法        
ByVal TrueScript As StringByVal FalseScript As StringAs String
撰写自用 Confirm 方法        
Dim sMessage As String
撰写自用 Confirm 方法        
Dim sScript As String
撰写自用 Confirm 方法
撰写自用 Confirm 方法        sMessage 
= ParserMessage(Message)
撰写自用 Confirm 方法        sScript 
= String.Format("if (confirm('{0}')){{ {1} }} else {{ {2} }}", sMessage, TrueScript, FalseScript)
撰写自用 Confirm 方法        
Return sScript
撰写自用 Confirm 方法    
End Function

撰写自用 Confirm 方法
    
''' <summary>
撰写自用 Confirm 方法    
''' 询问窗口。
撰写自用 Confirm 方法    
''' </summary>
撰写自用 Confirm 方法    
''' <param name="Message">消息正文。</param>
撰写自用 Confirm 方法    
''' <param name="TrueScript">响应 true 时要执行的客户端指令码。</param>
撰写自用 Confirm 方法    
''' <param name="FalseScript">响应 false 时要执行的客户端指令码。</param>

    Public Sub Confirm(ByVal Message As StringByVal TrueScript As StringByVal FalseScript As String)
撰写自用 Confirm 方法        
Dim sScript As String
撰写自用 Confirm 方法
撰写自用 Confirm 方法        sScript 
= GetConfirmScript(Message, TrueScript, FalseScript)
撰写自用 Confirm 方法        
Me.RegisterStartupScript("Confirm", sScript)
撰写自用 Confirm 方法    
End Sub

撰写自用 Confirm 方法
撰写自用 Confirm 方法
End Class

撰写自用 Confirm 方法

 

案例一:按钮加上询问讯息,按「确定」才会引发按钮的 Click 事件
按钮加上询息讯息是常使用到的案例,例如按下删除钮时,先询问用户是否确定删除数据,当按「确定」时才会真正去执行删除动作。我们可以在 Page Load 事件中,去设定 Button.OnClientClick 属性,加入询问讯息的客户端指令码。

 

    Protected Sub Page_Load(ByVal sender As ObjectByVal e As System.EventArgs) Handles Me.Load
        Button1.OnClientClick 
= Me.BeeScript.GetConfirmScript("确定删除此笔数据吗?")
    
End Sub

 

案例二:纯客户端的询问讯息
询问讯息只是在客户端执行,并不会产生 PostBack。

 

    Protected Sub Page_Load(ByVal sender As ObjectByVal e As System.EventArgs) Handles Me.Load
        
Dim sScript As String

        sScript 
= Me.BeeScript.GetConfirmScript("纯客户端的询问讯息?""alert('按了确定')""alert('按了取消')")
        HyperLink1.Attributes(
"onclick"= sScript
    
End Sub

 

案例三:先执行伺服端程序再弹出询问讯息,依客户端响应再接续执行
例如有登打请假单储存时,执行储存完毕要弹出一个是否送审询问讯息。在 WinForm 撰写这个程序代码非常单纯,只要在储存后弹出询问讯息,等待用户响应接续执行后面的程序代码即可。可是在 WebForm 要撰写相同的功能就有点麻烦了,因为整个程序的流程是在伺服端及客户端交互运作。


请假单储存(伺服端) -> 弹出询问讯息(客户端) -> 取得客户端响应决定是否送审(伺服端)


在 WebForm 要处理这类问题,要分为二个阶段处理,第一个阶段处理「请假单储存(伺服端) -> 弹出询问讯息(客户端) 」,在下面的程序代码中,讯问讯息的响应结果无论是「确定」或「取消」都会产生 PostBack 动作传不同的参数。

 

    Protected Sub btnSave_Click(ByVal sender As ObjectByVal e As System.EventArgs) Handles btnSave.Click
        
Dim sTrueScript As String
        
Dim sFalseScript As String

        
'执行请假单储存的程序代码

        
'储存完成弹出询问讯息,__EVENTTARGET 设为 "SaveConfirm"
        sTrueScript = "__doPostBack('SaveConfirm','True')"
        sFalseScript 
= "__doPostBack('SaveConfirm','False')"
        
Me.BeeScript.Confirm("假单要送审吗?", sTrueScript, sFalseScript)
    
End Sub

 

第二阶段在 Page Load 事件处理客户端询问讯息的响应「取得客户端响应决定是否送审(伺服端)」
 

 

    Protected Sub Page_Load(ByVal sender As ObjectByVal e As System.EventArgs) Handles Me.Load
        
'处理询问讯息的响应
        Dim sEventTarget As String = Me.Request.Form("__EVENTTARGET")
        
Dim sEventArgument As String = Me.Request.Form("__EVENTARGUMENT")
        
If String.Equals("SaveConfirm", sEventTarget, StringComparison.CurrentCultureIgnoreCase) Then
            
If String.Equals(sEventArgument, "True", StringComparison.CurrentCultureIgnoreCase) Then
                
'按了确定要执行的程序代码
            End If

            
If String.Equals(sEventArgument, "False", StringComparison.CurrentCultureIgnoreCase) Then
                
'按了取消要执行的程序代码
            End If
        
End If
    
End Sub

 

 

作者:jeff377 来源:博客园
 
 
 
昆明索仕科技开发有限公司 版权所有 Copyright© 2002-2010 Kunming Source Technology Exploitive Co.,LTD. All Rights Reserved.
电话:0871-5627877 业务QQ:163871 联系我们
本站基于:索仕网站信息管理系统建设 版本 2.0.4325