none
После PostBack не работает закрытие ModalPoup из ASP.NET AJAX Control Toolkit RRS feed

  • Вопрос

  • Здравствуйте форумчане. Столкнулся со следующей проблемой:

    При использовании ModalPoup из ASP.NET AJAX Control Toolkit. В общем делаю форму обратной связи:

     

    <div style="z-index: 10000; height: 100px; width: 50px; top: ((window.height/2)+50)px;
                    left: 0; position: fixed">
                    
                    <asp:ImageButton ID="btnShowPoup" runat="server" 
                      ImageUrl="~/Res/red_button.png" />
                    <asp:Panel ID="pnlEditCustomer" runat="server" style="display:none; background-image: url('Res/Fon/узор_2.jpg')">
                      <div style="padding: 7px; background-color: #4f4f4f; background-image: url('Res/Fon/узор_2.jpg')">
                      <div style="background-color: #8a8a8a; padding: 5px">
                        <asp:UpdatePanel runat="server" ID="ModalPanel1" RenderMode="Inline" UpdateMode="Conditional">
                          <ContentTemplate>
                          <div style="width: 100%" align="right">
                          <asp:Button ID="editBox_Cancel" runat="server" Text="X" BackColor="#4f4f4f" ForeColor="White"/>
                          </div>
                          
                            <asp:Label ID="lblMessage" runat="server" Text="" Visible="false" Font-Size="Large"></asp:Label>
                            <table>                          
                              <tr>
                                <td valign="top">
                                  <asp:Label ID="Label1" runat="server" Text="Ваше имя"></asp:Label>
                                </td>
                                <td>
                                  <asp:TextBox ID="tbUname" runat="server"></asp:TextBox>
                                  <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" Display="Dynamic"
                                  Font-Size="Small" ForeColor="Black" ErrorMessage="<br /> Заполните поле для отправки."
                                  ControlToValidate="tbUname"></asp:RequiredFieldValidator>
                                </td>
                              </tr>
                              <tr>
                                <td valign="top">
                                  <asp:Label ID="Label2" runat="server" Text="Ваш e-mail"></asp:Label>
                                </td>
                                <td>
                                  <asp:TextBox ID="tbUemail" runat="server"></asp:TextBox>
                                  <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" Display="Dynamic"
                                  Font-Size="Small" ForeColor="Black" ErrorMessage="<br /> Заполните поле для отправки."
                                  ControlToValidate="tbUemail"></asp:RequiredFieldValidator>
                                </td>
                              </tr>
                               <tr>
                                <td valign="top">
                                  <asp:Label ID="Label3" runat="server" Text="Ваш вопрос"></asp:Label>
                                </td>
                                <td>
                                  <asp:TextBox ID="tbUqestion" runat="server" TextMode="MultiLine" Width="200px" Height="150px"></asp:TextBox>
                                  <br /><asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" Display="Dynamic"
                                  Font-Size="Small" ForeColor="Black" ErrorMessage="Заполните поле для отправки."
                                  ControlToValidate="tbUqestion"></asp:RequiredFieldValidator>
                                </td>
                              </tr>
                            </table>
                            <hr />
                            <div align="center">
                            <asp:Button ID="Button1" runat="server" Text="Отправить" onclick="Button1_Click" /></div>
                          </ContentTemplate>
                        </asp:UpdatePanel>
                        
                        
                      </div></div>
                    </asp:Panel>
                    <asp:ModalPopupExtender ID="ModalPopupExtender1" runat="server" TargetControlID="btnShowPoup"
                      PopupControlID="pnlEditCustomer" OkControlID="editBox_Cancel" DropShadow="true">
                    </asp:ModalPopupExtender>
                  </div>
    

    В общем, приблизительно так. На событие клика, кнопки "отправить"(названной тривиально button1) у меня в aspx.cs файле оправка письма на e-mail администрации.

     

    Проблема в следующем - при вызове окна кнопка "X"(editBox_Cancel) работает нормально - окно закрывается. Но, если пользователь введет все поля, и нажмет отправить - т.е. происходит PostBack на сервер, где собственно говоря и отправляется письмо, после этого кнопка перестает закрывать ModalPoup. В данном примере кода кнопкой закрытия служит OkControl, если меняю ее на CancelControl - ничего не изменяется, после PostBack-а все равно Окно не закрывается. Пытался в C# коде вызывать сразу после отправки письма вызывать ModalPoup.Hide() - окно закрывается сразу после отправки, НО если пользователь снова открывает окно - он больше не может его закрыть.

    В общем суть вопроса в следующем - что происходит с OkControl и  CancelControl, что они перестают закрывать ModalPoup. И что мне нужно сделать - что бы избаться от этого, т.е. что бы они таки закрывали окно.

     

    Заранее спасибо.

Ответы

  • Есть такое. Есть несколько вариантов проблемы и решений.

    Первый - закрывать попап на стороне сервера. Если все сделано правильно - должно работать. В вашем случае при следующем вызове окно не работает. Это может быть связано с сохранением состояния контрола - в таком случае необходимо заново инициализировать контрол. Иногда на такое поведение влияет валидация (особенно если на форме есть еще несколько попапов).

    Второй - поставить триггер на кнопку OkButton - чтобы страница перезагрузилась полностью. Тогда много проблем исчезнут. Минус - нужно перезагружать страницу.

    Третий - вызывать с помощью javascript серверный код (веб-сервис) и после отправки на javascript закрывать окно. На OkButton можно повесить клиентский код.

    Четвертый - не использовать modalpopup контрол для сложных сценариев.

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

    1 июня 2011 г. 13:04

Все ответы

  • Есть такое. Есть несколько вариантов проблемы и решений.

    Первый - закрывать попап на стороне сервера. Если все сделано правильно - должно работать. В вашем случае при следующем вызове окно не работает. Это может быть связано с сохранением состояния контрола - в таком случае необходимо заново инициализировать контрол. Иногда на такое поведение влияет валидация (особенно если на форме есть еще несколько попапов).

    Второй - поставить триггер на кнопку OkButton - чтобы страница перезагрузилась полностью. Тогда много проблем исчезнут. Минус - нужно перезагружать страницу.

    Третий - вызывать с помощью javascript серверный код (веб-сервис) и после отправки на javascript закрывать окно. На OkButton можно повесить клиентский код.

    Четвертый - не использовать modalpopup контрол для сложных сценариев.

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

    1 июня 2011 г. 13:04
  • Я за второй вариан - надежнее

    P.S. И когда же наконец ASP.NET докрутят - попапы, крос барузерный грид с фиксированным хэдером, хэх ...


    Don't forget to vote for useful replies and/or mark answers for your questions - that helps other guys to find the answer faster.
    4 июня 2011 г. 19:32