使用JQuery和ASP.NET OnSelectedIndexChanged事件处理程序的时间

时间:2012-03-20 18:39:12

标签: jquery asp.net ajax

我正在尝试做一些具体的事情。我的想法是当用户更改下拉列表的值时,尝试使用JQuery弹出模式对话框。然后,用户应选择“继续”或“取消”。我希望该选择的结果确定我是否运行ASP.NET回发事件。现在弹出模态对话框,但随后ASP.NET页面执行AutoPostBack并消除模态框后立即消失。

解决我的dillema的好/优雅方法是什么?有没有办法让ASP.NET等待结果,或者我是否需要某种隐藏按钮来处理以后启动回发?

感谢您的帮助!

<asp:Content ID="MainContent" ContentPlaceHolderID="Content" runat="Server">
    <asp:ScriptManagerProxy ID="smpProxy" runat="server">
        <Scripts>
            <asp:ScriptReference Path="~/JQuery/jquery-1.7.1.min.js" />
            <asp:ScriptReference Path="~/JQuery/jquery-ui-1.8.18.custom.min.js" />
        </Scripts>
    </asp:ScriptManagerProxy>
    <asp:UpdatePanel ID="updPanel" runat="server">
        <ContentTemplate>
            <script type="text/javascript">
                function CheckConfirmation() {
                    $('#divConfirmChange').dialog("open");
                    return false;
                }

                function pageLoad() {
                    $("#divConfirmChange").dialog({
                        autoOpen: false,
                        resizable: false,
                        height: 158,
                        modal: true
                    });
                }
            </script>

然后这是我的下拉列表进一步向下

<asp:DropDownList ID="ddlApprovalStatus" onChange="javascript:CheckConfirmation();" runat="server" AutoPostBack="true" onSelectedIndexChanged="ddlProgram_SelectedIndexChanged">

1 个答案:

答案 0 :(得分:0)

设置为autopostback的下拉列表可能很难处理,尤其是当它位于更新面板内时。您需要覆盖页面请求管理器的回发。下面的示例使用默认的javaScript确认,但如果您不喜欢标准浏览​​器确认,我会推荐jQuery Alert Dialogs plugin,因为常规jQuery对话框不会在没有额外挂钩的情况下停止回发。

<script type="text/javascript">
    var prm = Sys.WebForms.PageRequestManager.getInstance();
    prm.add_initializeRequest(initializeRequest);

    function initializeRequest(sender, args) {
        var el = args.get_postBackElement().id;
        if (el == '<%=ddlApprovalStatus.ClientID %>') {
            if (!confirm('Are you sure?')) {
                args.set_cancel(true);            
            }
        }
    }
</script>