Выполнять обратную передачу при нажатии кнопки OkButton в ModalPopup в ASP.NET AJAX - PullRequest
2 голосов
/ 01 мая 2009

Я следую примеру в Атлас: создание подтверждения с помощью ModalPopup Extender для создания обратной передачи при нажатии кнопки OkButton в ModalPopup (она использует ModalPopupExtender, который входит в ASP.NET Ajax Control Toolkit) , но, как я вижу, Sys.WebForms.PostBackAction () больше не присутствует в ASP.NET AJAX (пример для Atlas). Когда я запускаю его, появляется сообщение об ошибке «Ошибка выполнения Microsoft JScript: ожидается объект» в строке в javascript, где я создаю действие PostBackAction. Как я могу сделать это работает в ASP.NET AJAX, или, может быть, есть другой способ сделать это? Спасибо

Ответы [ 6 ]

5 голосов
/ 22 мая 2009

События на стороне сервера работают с ModalPopupExtender. Что вам нужно сделать, это создать кнопку со стилем отображения, для которого не задано ни одного. Затем установите для свойства TargetControlID объекта ModalPopupExtender значение идентификатора скрытой кнопки.

<asp:Button ID="btnShowModal" runat="server" Text="Show" OnClick="btnShowModal_Click" />
<asp:Button ID="btnHidden" runat="server" Style="display: none" />
<ajaxControlToolkit:ModalPopupExtender ID="modalExtender" runat="server" 
    TargetControlID="btnHidden" PopupControlID="divId" />

В обработчике OnClick показывается модальное значение:

modalExtender.Show();

В обработчике для элемента управления, который закроет модальное (обычно кнопка) скрыть модальное:

modalExtender.Hide();

Я могу успешно использовать этот метод для отправки обратно на сервер, чтобы заполнить элементы управления в моем модале информацией из базы данных при обратной передаче. Работает как чемпион.

2 голосов
/ 30 июля 2009

Это решение, которое я искал. Отличный пост. Между прочим, создавать макет кнопки ОК не обязательно. Только не включайте дополнительный параметр OKbutton в определение Модального Всплывающего Расширения.

2 голосов
/ 04 июня 2009

Вы можете разместить невидимую кнопку на панели и установить ее как OkButton. Добавьте вашу фактическую кнопку на панель и добавьте обработчик события OnClick. Смотрите код ниже:

<cc1:ModalPopupExtender 
TargetControlID="btnSubmit"
DropShadow="true"
OkControlID="btnOK"
CancelControlID="btnDecline"
PopupControlID="pnlTermsAndConditions"
BackgroundCssClass="popup"
ID="ModalPopupExtender1" 
runat="server">
</cc1:ModalPopupExtender>
<asp:Panel ID="pnlTermsAndConditions" runat="server">
<table width="500" cellpadding="6" cellspacing="0" border="0" bgcolor="white">
<tr>
    <td><b>Tables and Content</b></td>
</tr>
<tr>
    <td><asp:TextBox ID="TermsAndCondition" runat="server" TextMode="MultiLine" Rows="10" Columns="60">
    This is my terms and condoition
    </asp:TextBox></td>
</tr>
<tr>
    <td align="center">
    <asp:Button ID="btnAccept" runat="server" CssClass="btn" Text=" Accept " OnClick="btnAccept_Click" />&nbsp;&nbsp;
    <asp:Button ID="btnDecline" runat="server" CssClass="btn" Text=" Decline " />
    <asp:Button ID="btnOK" style="display:none;visible:false;" runat="server" CssClass="btn" Text=" OK " />
    </td>
</tr>
</table>
</asp:Panel>
2 голосов
/ 01 мая 2009

Задумывались ли вы об использовании ConfirmButtonExtender ? Вы получаете модальный "bling" через расширитель, и у вас будет обработка PostBack, в которой вы нуждаетесь.

Вы связываете событие нажатия кнопки, как обычно, для обработки, но расширитель подтверждения «перехватит» обработку и позволит продолжить работу, если пользователь подтверждает действие.

2 голосов
/ 01 мая 2009

Если я правильно помню ModalPopupExtender, у него есть OKControlID, который вы указали в качестве идентификатора кнопки.

Не могли бы вы просто назначить кнопку на клиентском обработчике "onclick", который вызывает обратную передачу?

Например, что-то вроде:

 myModalPopupExtender.OkButtonID = myOKButton.ID;
 string script = ClientScriptManager.GetPostBackEventReference(myOKButton, myOKButton.ID);

 myOKButton.Attributes.Add("onclick", script);

РЕДАКТИРОВАТЬ : похоже, другое потенциальное решение здесь.

1 голос
/ 01 мая 2009

Может быть, просто добавить на кнопку событие OnClick на стороне сервера? Это должно опубликовать всю форму. Или вы можете получить основную форму из html ($ find ('myFormName') или чего-то еще) и выполнить для нее .submit ().

...