2013-10-03 2 views
0

Возможно, я неправильно понял элемент управления или, возможно, неправильно его реализую, но я использовал 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 программно будет хорошо. Надеюсь, это очистит мой вопрос. Спасибо всем за ваши ответы.

+0

Можете ли вы подтвердить, что вы подразумеваете под «Код сервера, который продолжает работать»? Серверный код будет продолжать работать до тех пор, пока страница не будет отправлена ​​в браузер. Похоже, вы хотите запустить серверную сторону расширителя. На странице будет завершен жизненный цикл, как обычно. Если бы вы остановили это, страница никогда не будет отображаться. –

ответ

0

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

http://www.w3schools.com/aspnet/aspnet_refvalidationcontrols.asp

http://msdn.microsoft.com/en-us/library/aa479013.aspx

+0

Не знаете, какие меры контроля важны для решения проблемы? Возможно, я просто не понимаю, что вы предлагаете. Я проверяю свои элементы управления, но приведенный выше код происходит после обратной передачи после того, как это уже произошло. Я пытаюсь определить, как сделать ModalPopupExtender более похожим на JavaScript «Alert». Надеюсь, это имеет больше смысла. – Aaj

0

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

Если вы хотите это, то добавьте PopupDragHandleControlID = "Panel1" в вашем элементе управления modelpopup.

<ajaxToolkit:ModalPopupExtender ID="ModalMessageExtender" runat="server" 
OkControlID="btnOkay" PopupControlID="Panel1" PopupDragHandleControlID="Panel1" 
TargetControlID="btnPopup" BackgroundCssClass="modalPopupBG"> 
</ajaxToolkit:ModalPopupExtender> 

UPDATE

просто заменить Response.Redirect ("Register.aspx"); до btnOkay щелкнуть мероприятие.

на ASPX странице -

<asp:Button runat="server" Text="Ok" Width="75px" Height="30px" ID="btnOkay" OnClick="btnOkay_Click" CssClass="modalButton gray modalButton"/> 

на aspx.cs странице -

protected void btnOkay_Click(object sender, EventArgs e) 
{ 
    Response.Redirect("Register.aspx"); 
} 

тогда, пока пользователь не нажмет на кнопку "Ok". он/она не может перенаправить на страницу регистрации.

+0

Я думал, это было только для того, чтобы модальный быть перемещенным вокруг? Я не вижу, чтобы произошли какие-то изменения, можете ли вы привести пример, основанный на моем обновлении выше. Спасибо. – Aaj

+0

@Aaj, пожалуйста, ознакомьтесь с обновлением –

+0

Это то, что я закончил, пока не придумаю лучшее решение, но это не решение проблемы ... Я хочу, чтобы иметь возможность вызвать метод show inline, как предупреждение, независимо от того, что такое следующий код и остановить его выполнение до тех пор, пока пользователь не наберет ОК. – Aaj

Смежные вопросы