首页 | 麦客学吧 | 视频教程 | FLASH小游戏 | 素材下载 | 常用工具
您当前的位置:首页 > 程序开发 > ASP.NET > 正文

撰写JavaScript的confirm方法

出处:麦客学吧 [2008-8-1 8:32:04] 点击数:457
我们将使用「撰写自用的 ScriptManager 来管理客户端指令码」文中提及的 TBScriptManager 类别为基础,在 TBScriptManager 类别新增处理「询问讯息」会使用到相关方法。我们在 TBScriptManager 类别新增二个 GetConfirmScript 多载方法,用以取得询问讯息相关的 JavaScript 程序代码;另新增 Confirm 方法来直接注册询问讯息的客户端指令码,以下将以实例说明这三个方法的使用时机及方式。
/**/''' <summary>

''' 客户端指令码管理。
''' </summary>
Public Class TBScriptManagerClass TBScriptManager

    /**/''' <summary>
    ''' 处理消息正文的跳脱字符。
    ''' </summary>
    ''' <param name="Message">消息正文。</param>
    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

    /**/''' <summary>
    ''' 取得讯问窗口的客户端指令码。
    ''' </summary>
    ''' <param name="Message">消息正文。</param>
    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

    /**/''' <summary>
    ''' 取得讯问窗口的客户端指令码。
    ''' </summary>
    ''' <param name="Message">消息正文。</param>
    ''' <param name="TrueScript">响应 true 时要执行的客户端指令码。</param>
    ''' <param name="FalseScript">响应 false 时要执行的客户端指令码。</param>
    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

    /**/''' <summary>
    ''' 询问窗口。
    ''' </summary>
    ''' <param name="Message">消息正文。</param>
    ''' <param name="TrueScript">响应 true 时要执行的客户端指令码。</param>
    ''' <param name="FalseScript">响应 false 时要执行的客户端指令码。</param>
    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

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

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        Button1.OnClientClick = Me.BeeScript.GetConfirmScript("确定删除此笔数据吗?")
    End Sub

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

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

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

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

【责任编辑: lanier

关于 JavaScript confirm 的相关文章
昵 称:麦客网友[游客]  如果您不想匿名评论请先登录注册
评 论:请自觉遵守互联网相关政策法规,管理员有权删除恶意评论、广告和违禁词语。

验证码: 验证码,看不清楚?请点击刷新验证码    
麦客酷站赏析频道

精彩图文推荐

关于本站 - 联系站长 - 广告服务 - 合作伙伴 - 网站地图 - 版权声明 - 报告错误 - 收藏本站 | Http://www.MaiCoo.com

Copyright © 2005 - 2008 MaiCoo.com All Rights Reserved

违法和不良信息举报中心 本站服务器空间和带宽由雷克斯网络提供赞助
浙ICP备06017818号