【问题标题】:ModelPopupExtender not showing from code behind on pageLoadModalPopupExtender 没有从页面加载后面的代码中显示
【发布时间】:2018-04-23 06:33:27
【问题描述】:

我需要在页面加载时显示弹出窗口。我使用了 ModelPopupExtender。它确实显示在它的 TargetControlID 单击上,但没有显示在从后面的代码加载的页面上。 我在堆栈上检查了许多解决方案,但没有一个对我有用。

protected void Page_Load(object sender, System.EventArgs e)
{
    this.mpOTP.Show();
}

 <asp:Button ID="activateMpOtp" runat="server" Text="Open" ClientIDMode="Static"/>
    <asp:ModalPopupExtender ID="mpOTP" runat="server" BackgroundCssClass="popup-overlay" PopupControlID="pnlOTP" CancelControlID="closeOTP" TargetControlID="activateMpOtp"></asp:ModalPopupExtender>

    <asp:Panel ID="pnlOTP" runat="server" CssClass="popup-dialogue">
    </asp:Panel>

在控制台中出现此错误

【问题讨论】:

  • 你在使用 AJAXControlToolKit 吗?
  • @Sunil 是的。从 nuget 管理器下载
  • 检查我的答案。

标签: c# asp.net ajax modalpopupextender


【解决方案1】:

您的标记不正确。

首先,您需要在页面标记顶部使用以下指令注册 AjaxControlToolKit 控件,就在页面指令之后。

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="act %>

然后,您的标记应如下所示。下面列出了您的标记存在的问题。

  • 您没有为取消按钮添加标记
  • 而且您的控件前缀是错误的,因为它不应该是 asp,这是用于 ASP.Net Microsoft 控件而不是 AJAXControlToolKit 的前缀(注意:您在 AjaxControl、Toolkit 的注册指令中提供此前缀,在给出的代码示例中是act,但您可以给出任何前缀并将其用于modalpopuextender)

ModalPopupExtender 的正确标记

<asp:Button ID="activateMpOtp" runat="server" Text="Open" ClientIDMode="Static"/>
<act:ModalPopupExtender ID="mpOTP" runat="server" BackgroundCssClass="popup-overlay"
         PopupControlID="pnlOTP" CancelControlID="closeOTP"
         TargetControlID="activateMpOtp"></act:ModalPopupExtender>

<asp:Panel ID="pnlOTP" runat="server" CssClass="popup-dialogue">
  <div class="header">
    Modal Popup
  </div>
  <div class="body">
    Your content goes here
    <br />
    <asp:Button ID="closeOTP" runat="server" Text="Close" />
 </div>
</asp:Panel>

【讨论】:

  • 我没有提到整页代码。但我确实在我的内容页面上注册了 AjaxControlToolKit。无论我定义了我使用了什么前缀。另一件事是它正在使用 TargetControlID。我只需要在页面加载时从后面的代码中调用它。
  • 好的。所以我没有在标记中定义取消按钮 ID,所以它不起作用。感谢您的帮助
  • 不要使用 asp 作为 AJAXControlToolkit 的标记前缀,因为它用于 Microsoft 控件。因此,最好使用不冲突的前缀,例如 act 或 cc1 或任何您喜欢的前缀。这只是一种很好的编程习惯。
  • 是的,您已经有了正确的服务器端代码。您可以在服务器端代码中更改的一件事是仅在 Page.IsPostBack == false 时调用 Show 方法,因此您的代码应类似于 if(!Page.IsPostBack) { this.mpOTP.Show(); }
猜你喜欢
  • 2017-06-14
  • 1970-01-01
  • 2013-11-10
  • 1970-01-01
  • 2013-06-27
  • 1970-01-01
  • 2020-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多