0

也许我误解了控件,或者很可能没有正确实现它,但我使用了 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 就可以了。希望这能解决我的问题。谢谢大家到目前为止的回复。

4

2 回答 2

0

您可以使用验证控件来检查字段是否正确填写,有关更多详细信息,请查看以下链接:

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

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

于 2013-10-03T04:53:31.117 回答
0

如果我正确理解了您的查询,那么您希望直到用户没有单击模型弹出窗口上的“确定”按钮,用户不应该能够单击页面。

如果你想要这个,那么在你的 modelpopup 控件中添加PopupDragHandleControlID="Panel1" 。

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

更新

只需替换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");
}

然后直到用户不会点击“确定”按钮。他/她不能重定向到注册页面。

于 2013-10-03T05:01:08.000 回答