1

ASP.NET C# アプリケーションで単純な jquery-ui モーダル ダイアログを削除の確認として使用しようとしています。私はこれまで何度もこれを行ってきましたが、このアプリケーションでは何らかの理由で動作が正しくありません。ダイアログがポップアップ表示され、[はい] または [いいえ] をクリックする前にすぐに消えます。関連するコード(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>

確認関数を使用している場所は次のとおりです (コントロールの OnClientClick 内<asp:Button>):

    <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前に実行されるため、ダイアログが表示され、すぐにページが投稿され、ダイアログが消えます。

問題は、モーダル ダイアログ ボックスが従来の Windows の意味でモーダルでないことです。JavaScript は続きます。最も簡単なテストは、戻る直前にアラートを追加することです。ダイアログが表示された直後にポップアップが表示されます。

この問題を回避するには、return false常に OnContentClick で、次に Yes/No ボタン イベント ハンドラで__doPostbackjavascript メソッドを使用します。

于 2013-01-22T20:08:11.793 に答える
1

returnボタン自体である呼び出し元にremConfirmedする必要があります。ボタンで、これを行います:

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