也许我误解了控件,或者很可能没有正确实现它,但我使用了 ModalPopupExtender 就像我想在桌面开发中使用 MessageBox 一样。我遇到的问题是,一旦我调用 ModalPopupExtender 的 Show() 方法,尽管用户尚未单击设置为 OkControlID 的按钮,它仍会继续执行服务器端代码。这是正常行为,还是有办法在单击 OkControlID 之前执行代码。要指定,我不想在按钮单击处理程序中创建另一个事件,因为此弹出窗口是内联的。这是我的代码 - 任何建议都值得赞赏。
我的控制:
<%@ 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 永远不会显示。我对 Web 开发有点陌生,所以如果我使用了不正确的术语,请原谅我。但本质上,我希望代码背后的代码执行等待用户单击“确定”。我正在尝试替换这样的东西:
ScriptManager.RegisterStartupScript(this, typeof(string), "Message", "alert('Your new account has been created!'); window.location='" + continueUrl + "';", true);
有了一些更好看的东西,而且由于我已经在进行回发,我认为以编程方式调用 ModalPopupExtender 就可以了。希望这能解决我的问题。谢谢大家到目前为止的回复。