使用 VB6 或 VB.NET 的开发人员,一定常会使用到 MsgBox 这个函式来显示讯息,如果使用 VB.NET 在开发 ASP.NET 程序,会发现似乎 MsgBox 这个函式好像可以使用,就直接使用 MsgBox 来显示讯息。
MsgBox
(
"
这是讯息
"
)
在 VS 开发环境中执行程序,MsgBox 函式好像也可以正常显示讯息;可是一旦网站发布出去后,就会发现 MsgBox 函式失效了。这是什么原因呢?MsgBox 函式是伺服端的语言,而客户端只能透过浏览器解析 HTML 及 JavaScript,所以 MsgBox 函式是无法使用在 ASP.NET 的程序,只能在开发侦错时使用。在 ASP.NET 中,要在客户端显示讯息正确的方法是要使用 RegisterStartupScript 方法来输出 JavaScript 的 alert 函式。
ScriptManager.RegisterStartupScript(
Me
,
Me
.GetType(),
"
alert
"
,
"
alert('这是讯息')
"
,
True
)
或
Me .ClientScript.RegisterStartupScript( Me .GetType(), " alert " , " alert('这是讯息') " , True )
或
Me .ClientScript.RegisterStartupScript( Me .GetType(), " alert " , " alert('这是讯息') " , True )
是不是觉得在 ASP.NET 中要显示讯息麻烦多了,能否让 ASP.NET 中也可以使用 MsgBox 来显示讯息呢?其实方法很简单,就是自己写一个 MsgBox 方法就好了,就可以延用以前习惯的 MsgBox 来显示讯息。我们在 BasePage 中撰写 MsgBox 方法,这个 MsgBox 方法还处理消息正文中含「单引号」及「换行」的部分,将这些特殊字符串转换为对应的 JavaScript 跳脱字符。
'''
<summary>
''' 弹出提示讯息。
''' </summary>
''' <param name="Message"> 消息正文。 </param>
Public Sub MsgBox ( ByVal Message As String )
Dim sScript As String
Dim sMessage As String
sMessage = Strings.Replace(Message, " ' " , " \' " ) ' 处理单引号
sMessage = Strings.Replace(sMessage, vbNewLine, " \n " ) ' 处理换行
sScript = String .Format( " alert('{0}'); " , sMessage)
ScriptManager.RegisterStartupScript( Me , Me .GetType(), " alert " , sScript, True )
End Sub
''' 弹出提示讯息。
''' </summary>
''' <param name="Message"> 消息正文。 </param>
Public Sub MsgBox ( ByVal Message As String )
Dim sScript As String
Dim sMessage As String
sMessage = Strings.Replace(Message, " ' " , " \' " ) ' 处理单引号
sMessage = Strings.Replace(sMessage, vbNewLine, " \n " ) ' 处理换行
sScript = String .Format( " alert('{0}'); " , sMessage)
ScriptManager.RegisterStartupScript( Me , Me .GetType(), " alert " , sScript, True )
End Sub
所有继承 BasePage 的页面都可以使用 MsgBox 方法来显示讯息。
Protected
Sub
Button1_Click(
ByVal
sender
As
Object
,
ByVal
e
As
System.EventArgs)
Handles
Button1.Click
Dim sMessage As String
sMessage = " alert 讯息换行测试 " & vbNewLine & " 测试'单引号' "
MsgBox (sMessage)
End Sub
Dim sMessage As String
sMessage = " alert 讯息换行测试 " & vbNewLine & " 测试'单引号' "
MsgBox (sMessage)
End Sub
備註:處理 JavaScript 的相關函式,筆者比較建議使用「撰寫自用的 ScriptManager 來管理用戶端指令碼」一文中提供的方式來處理,所以可以將 MsgBox 方法撰寫在該文中的 TBScriptManager 類別。