Событие закрытия диалогового окна jQuery не работает должным образом - PullRequest
1 голос
/ 01 марта 2012

Я пытаюсь создать всплывающее диалоговое окно с событиями CodeBehind и JavaScript.Я создал кнопку, которая запускает следующий диалог.Это прекрасно работает.

<script type="text/javascript">

    function ShowDialog(aPage, aWidth, aHeight, aTitle) {
        var $popupURL = aPage;
        var $popupDv = $("#resultDiv");

        jQuery.ajax({ url: $popupURL,
            cache: false,
            success: function (html) {
                $popupDv.empty().append(html);

                $popupDv.dialog({
                    width: aWidth,
                    height: aHeight,
                    modal: true,
                    title: aTitle,
                    draggable: false,
                    resizable: false
                });
            }
        });
    }

</script>

Код кнопки:

<form id="form1" runat="server">
<div>
    <div id="resultDiv">
    </div>
    <input id="Edit1Button" type="button" value="Edit 1" onclick="ShowDialog('edit3.aspx?ID=1', 600, 400, 'Hello Edit 1')" />
</div>
</form>

Имейте в виду, что это всего лишь тестовый код ... Хорошо, поэтому после нажатия кнопки появляется диалоговое окно.В диалоговом окне у меня есть следующий код ..

<form id="form2" runat="server">
<div>
    <h1>
        Edit Dialog 3</h1>
    <asp:Button ID="CloseButton" runat="server" Text="Close" OnClick="CloseButton_Click"
        OnClientClick="$('#resultDiv').dialog('close'); return true;" />
</div>
</form>

, если я возвращаю false, то просто срабатывает javascript OnClientClick и диалог закрывается .. Работает как положено.если я устанавливаю return true, диалоговое окно закрывается, но именно в этом проблема.основная форма исчезает и заменяется диалоговой формой.

Мне нужна эта кнопка, чтобы выполнить CloseButton_Click в codebehind, а затем закрыть диалоговое окно.Я ОЧЕНЬ новичок в asp.net и C #, так что будьте осторожны с вашими ответами .. как недели

Спасибо, Энтони

1 Ответ

0 голосов
/ 01 марта 2012

Что происходит, так как ваша дочерняя форма (Edit3.aspx) отправляет обратно на веб-сервер, ASP.NET отправляет обратно ответ для Edit3.aspx, а не вашу первоначальную форму. Чтобы выполнить то, что вы хотите, вы должны будете использовать асинхронную обратную передачу на сервер. Это можно сделать, изменив форму Edit3.aspx следующим образом:

<form id="form2" runat="server"> 
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<div> 
<h1 runat="server" id="edit3"> 
    Edit Dialog 3</h1> 
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Button ID="CloseButton" runat="server" Text="Close" OnClientClick="$('#resultDiv').dialog('close'); return true;" /> 
</ContentTemplate>
</asp:UpdatePanel>
</div> 

Элемент управления ScriptManager и элемент управления UpdatePanel позволяют вашей форме асинхронно отправлять обратно на сервер.

...