Использование диалогового окна подтверждения JavaScript на кнопке внутри UpdatePanel - отправка полной страницы назад - PullRequest
1 голос
/ 31 марта 2011

Я хочу показать диалоговое окно с опциями подтверждения или отмены.

Подтверждение должно разрешить частичную обратную передачу, отмена не должна.Я пытался использовать триггер и вызывать __doPostBack(), как было рекомендовано здесь , но он возвращает всю страницу, а не только панель.

$('#buttonInUpdatePanel').live('click', function (event) {
    event.preventDefault();
    var item = this;
    var title = 'Confirm';
    var msg = 'Please confirm something';

    var $dialog = $("<div id='myDialog'></div>")
        .html(msg)
        .dialog({
            modal: true,
            buttons: {
                "Confirm": function () {
                    $(this).dialog("close");
         __doPostBack('Button1', null); //tried this and .submit() on the button
                    //return true;
                },
                "Cancel": function () {
                    $(this).dialog("close");
                    //return false;
                }
            },
            title: title
        });
});

Моя панель обновления:

<asp:UpdatePanel ID="UpdatePanel2" UpdateMode="Conditional" runat="server">
    <ContentTemplate>
        <asp:TextBox runat="server" ID="TextBox1" />
        <asp:Button 
            ID="Button1" 
            Text="Add" 
            OnClick="AddExtraVehicle_Click" 
            runat="server" />
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />
    </Triggers>
</asp:UpdatePanel>

ОБНОВЛЕНИЕ:

Я изменил doPostBack, чтобы теперь использовать идентификатор кнопки, и закомментировал возвращаемые истинные и ложные строки.

Когда я нажимаюКнопка вызывает диалоговое окно подтверждения, но когда вы нажимаете на кнопку подтверждения, похоже, ничего не происходит.Я ожидал вызова метода AddExtraVehicle_Click, но точка останова не сработала.

1 Ответ

1 голос
/ 31 марта 2011

ОБНОВЛЕНИЕ: это

 __doPostBack('Button1', null)

не будет работать. Когда ASP.NET отображает ваш Button1, идентификатор на самом деле не «Button1». Это изменено, чтобы содержать идентификатор его названного содержания. Вам нужно сделать это

 __doPostBack($('input[id$=Button1]').attr("id"), null); //You need to use the real ID of the button which this statement will do

Вы на правильном пути, но немного в стороне от дороги :). Попробуйте этот код

var $dialog = $("<div id='myDialog'></div>")
        .html(msg)
        .dialog({
            modal: true,
            buttons: {
                "Confirm": function () {
                    $(this).dialog("close");
         __doPostBack($('input[id$=Button1']).attr("id"), null); //tried this and .submit() on the button
                    return true;
                },
                "Cancel": function () {
                    $(this).dialog("close");
                    return false;
                }
            },
            title: title
        });
});

Обычно вы хотите вызвать __doPostBack с идентификатором элемента управления, который был зарегистрирован как асинхронный триггер панели обновления. Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...