我们将使用「[url=http://x8.maicoo.com/tech/net/18052.html]撰写自用的 ScriptManager 来管理客户端指令码[/url]」文中提及的 TBScriptManager 类别为基础,在 TBScriptManager 类别新增处理「询问讯息」会使用到相关方法。我们在 TBScriptManager 类别新增二个 GetConfirmScript 多载方法,用以取得询问讯息相关的 JavaScript 程序代码;另新增 Confirm 方法来直接注册询问讯息的客户端指令码,以下将以实例说明这三个方法的使用时机及方式。
[code]/**/'''
''' 客户端指令码管理。
'''
Public Class TBScriptManagerClass TBScriptManager
/**/'''
''' 处理消息正文的跳脱字符。
'''
''' 消息正文。
Private Function ParserMessage()Function ParserMessage(ByVal Message As String) As String
Dim sMessage As String
sMessage = Strings.Replace(Message, "'", "\'") '处理单引号
sMessage = Strings.Replace(sMessage, vbNewLine, "\n") '处理换行
Return sMessage
End Function
/**/'''
''' 取得讯问窗口的客户端指令码。
'''
''' 消息正文。
Public Overloads Function GetConfirmScript()Function GetConfirmScript(ByVal Message As String) As String
Dim sMessage As String
Dim sScript As String
sMessage = ParserMessage(Message)
sScript = String.Format("if (confirm('{0}')==false) {{return false;}}", sMessage)
Return sScript
End Function
/**/'''
''' 取得讯问窗口的客户端指令码。
'''
''' 消息正文。
''' 响应 true 时要执行的客户端指令码。
''' 响应 false 时要执行的客户端指令码。
Public Overloads Function GetConfirmScript()Function GetConfirmScript(ByVal Message As String, _
ByVal TrueScript As String, ByVal FalseScript As String) As String
Dim sMessage As String
Dim sScript As String
sMessage = ParserMessage(Message)
sScript = String.Format("if (confirm('{0}')){{ {1} }} else {{ {2} }}", sMessage, TrueScript, FalseScript)
Return sScript
End Function
/**/'''
''' 询问窗口。
'''
''' 消息正文。
''' 响应 true 时要执行的客户端指令码。
''' 响应 false 时要执行的客户端指令码。
Public Sub Confirm()Sub Confirm(ByVal Message As String, ByVal TrueScript As String, ByVal FalseScript As String)
Dim sScript As String
sScript = GetConfirmScript(Message, TrueScript, FalseScript)
Me.RegisterStartupScript("Confirm", sScript)
End Sub
End Class[/code]
案例一:按钮加上询问讯息,按「确定」才会引发按钮的 Click 事件
按钮加上询息讯息是常使用到的案例,例如按下删除钮时,先询问用户是否确定删除数据,当按「确定」时才会真正去执行删除动作。我们可以在 Page Load 事件中,去设定 Button.OnClientClick 属性,加入询问讯息的客户端指令码。
[code] Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Button1.OnClientClick = Me.BeeScript.GetConfirmScript("确定删除此笔数据吗?")
End Sub[/code]
案例二:纯客户端的询问讯息
询问讯息只是在客户端执行,并不会产生 PostBack。
[code] Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim sScript As String
sScript = Me.BeeScript.GetConfirmScript("纯客户端的询问讯息?", "alert('按了确定')", "alert('按了取消')")
HyperLink1.Attributes("onclick") = sScript
End Sub[/code]案例三:先执行伺服端程序再弹出询问讯息,依客户端响应再接续执行
例如有登打请假单储存时,执行储存完毕要弹出一个是否送审询问讯息。在 WinForm 撰写这个程序代码非常单纯,只要在储存后弹出询问讯息,等待用户响应接续执行后面的程序代码即可。可是在 WebForm 要撰写相同的功能就有点麻烦了,因为整个程序的流程是在伺服端及客户端交互运作。
请假单储存(伺服端)