Возможно, я неправильно понял элемент управления или, возможно, неправильно его реализую, но я использовал ModalPopupExtender так же, как я бы хотел использовать MessageBox в разработке настольных систем. Проблема, с которой я сталкиваюсь, заключается в том, что, когда я вызываю метод Show() модуля ModalPopupExtender, он продолжает выполнять код на стороне сервера, несмотря на то, что пользователь еще не нажал кнопку, установленную как OkControlID. Является ли это обычным поведением и есть способ выполнения кода ошибки до тех пор, пока не будет нажата кнопка OkControlID. Чтобы указать, я не хочу создавать другое событие в обработчике нажатия кнопки, поскольку это всплывающее окно является встроенным. Вот мой код - любые советы приветствуются.Модификация пакета ModalPopupExtender До тех пор, пока не будет нажата Ok?
Мой контроль:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ModalMessage.ascx.cs" Inherits="LB.ModalMessage" %>
<asp:Button ID="btnPopup" runat="server" style="display: none;"/>
<ajaxToolkit:ModalPopupExtender ID="ModalMessageExtender" runat="server"
OkControlID="btnOkay" PopupControlID="Panel1"
TargetControlID="btnPopup" BackgroundCssClass="modalPopupBG">
</ajaxToolkit:ModalPopupExtender>
<asp:Panel CssClass="whitebubble" ID="Panel1" style="display: none; max-width:400px;" runat="server">
<div style="padding:5px 5px 35px 5px;">
<asp:Label ID="lblMessage" Font-Size="Medium" runat="server" ForeColor="Black"/>
<br />
<asp:Button runat="server" Text="Ok" Width="75px" Height="30px" ID="btnOkay" CssClass="modalButton gray modalButton"/>
</div>
</asp:Panel>
контрольный код позади:
public void ShowMessage(string message)
{
this.lblMessage.Text = message;
ModalMessageExtender.Show();
}
Моя страница Содержание:
<%@ Register Src="~/ModalMessage.ascx" TagName="ModalMessage" TagPrefix="mm" %>
<mm:ModalMessage runat="server" ID="mpeMessage"/>
Мой код Содержание за:
mpeMessage.ShowMessage("Please enter a username before attempting to reset your password.");
ОБНОВЛЕНИЕ: Извините за недостаток ясности - позвольте мне сделать мой вопрос более ясным. Если я делаю следующее:
mpeMessage.ShowMessage("Please enter a username before attempting to reset your password.");
Response.Redirect("Register.aspx");
Перенаправление происходит и ModalPopupExtender никогда не будет показано. Я немного новичок в веб-разработке, поэтому, пожалуйста, простите меня, если я использую неправильную терминологию. Но, по сути, я хочу, чтобы код в коде задерживался, чтобы подождать, пока пользователь нажмет «Хорошо». Я пытаюсь заменить что-то вроде этого:
ScriptManager.RegisterStartupScript(this, typeof(string), "Message", "alert('Your new account has been created!'); window.location='" + continueUrl + "';", true);
с чем-то немного приятнее смотреть, и с тех пор я уже делаю постбэк так или иначе, я думал, что вызов ModalPopupExtender программно будет хорошо. Надеюсь, это очистит мой вопрос. Спасибо всем за ваши ответы.
Можете ли вы подтвердить, что вы подразумеваете под «Код сервера, который продолжает работать»? Серверный код будет продолжать работать до тех пор, пока страница не будет отправлена в браузер. Похоже, вы хотите запустить серверную сторону расширителя. На странице будет завершен жизненный цикл, как обычно. Если бы вы остановили это, страница никогда не будет отображаться. –