1

我正在尝试使用简单的 jquery-ui 模式对话框作为 ASP.NET C# 应用程序中的删除确认。我以前做过很多次,但由于某种原因,在这个应用程序中它行为不端。我看到对话框弹出然后它立即消失,然后我可以单击“是”或“否”。这是相关代码(Javascript):

    <script type="text/javascript" src="/resources/jquery-1.8.2.min.js"></script>
    <script type="text/javascript" src="/resources/jquery-ui-1.9.1.custom.min.js"></script>

    <link rel="stylesheet" type="text/css" href="/resources/ui-lightness/jquery-ui-1.9.1.custom.css" />

    <script type="text/javascript">
        var remConfirmed = false;
        function ConfirmRemoveDialog(obj, title, dialogText) {
            if (!remConfirmed) {
                //add the dialog div to the page
                $('body').append(String.Format("<div id='confirmRemoveDialog' title='{0}'><p>{1}</p></div>", title, dialogText));
                //create the dialog
                $('#confirmRemoveDialog').dialog({
                    modal: true,
                    resizable: false,
                    draggable: false,
                    close: function(event, ui) {
                        $('body').find('#confirmRemoveDialog').remove();
                    },
                    buttons:
                    {
                        'Yes, remove it': function() {
                            $(this).dialog('close');
                            remConfirmed = true;
                            if (obj) obj.click();
                        },
                        'No, keep it': function() {
                            $(this).dialog('close');
                        }
                    }
                });
            }

            return remConfirmed;
        }

        //String.Format function (since Javascript doesn't have one built-in
        String.Format = function() {
            var s = arguments[0];
            for (var i = 0; i < arguments.length - 1; i++) {
                var reg = new RegExp("\\{" + i + "\\}", "gm");
                s = s.replace(reg, arguments[i + 1]);
            }
            return s;
        }
    </script>

这是我使用确认功能的地方(在<asp:Button>控件的 OnClientClick 中):

    <asp:Button ID="btnRemoveProgram" runat="server" Text="Remove" CausesValidation="false" OnClientClick="ConfirmRemoveDialog(this, 'Please confirm removal', 'Are you sure you wish to remove the selected Program? This cannot be undone.');" />

正如我所说,我之前已经多次成功地使用过相同的构造(几乎相同的代码);我不知道为什么它现在不起作用。任何想法都将不胜感激,我真的很难过这一点。

4

2 回答 2

2

runat="server"告诉按钮它应该回发以在服务器上执行事件。将OnClientClick在客户端之前执行,因此您将看到对话框,然后立即发布页面,导致对话框消失。

问题是您的模态对话框不是传统窗口意义上的模态对话框。javascript继续。最简单的测试是在您返回之前添加一个警报,您会看到它在显示对话框后立即弹出。

要解决此问题,return false请始终在 OnContentClick 和 Yes/No 按钮事件处理程序中使用__doPostbackjavascript 方法

于 2013-01-22T20:08:11.793 回答
1

您需要returnremConfirmed 给调用者,这是按钮本身。在您的按钮上,执行以下操作:

OnClientClick="return ConfirmRemoveDialog(/* the rest of the code */);"
于 2013-01-22T20:11:53.817 回答