【发布时间】:2013-07-03 17:12:32
【问题描述】:
我想要一个代表输入对话框(带有可自定义标签和文本框的面板)的 UserControl。这个 UserControl 需要通过 ModalPopupExtender 打开。 我从以下可行但不在 UC 中的解决方案开始:
<!-- Popup to add brand -->
<asp:Panel ID="pnlAddPopup" DefaultButton="cmdOk" runat="server" style="display: none;">
<atk:ModalPopupExtender ID="popupExtender" runat="server" TargetControlID="cmdAdd" PopupControlID="pnlAddPopup" CancelControlID="cmdAbbrechen" BackgroundCssClass="modalBackground" />
<div id="Div1" style="border-style: none; padding: 5px;" runat="server">
<table style="border: 0">
<tr>
<td style="background-color: #CCCCCC; height: 15px; text-align: right" />
</tr>
<tr>
<td style="background-color: #FFE580;">
<div style="padding: 10px;">
<cc1:SDDataLabel ID="name" runat="server" Text="Name"/>
<cc1:SDTextBox ID="txtInput" Width="300" runat="server"/>
</div>
</td>
</tr>
<tr>
<td style="background-color: #FFE580; height: 20px; text-align: center">
<cc1:SDButton ID="cmdOk" OnClick="CmdAddOkClick" CssClass="button" runat="server" />
<cc1:SDButton ID="cmdAbbrechen" CssClass="button" runat="server" />
</td>
</tr>
</table>
</div>
</asp:Panel>
我更喜欢什么:如果我可以像这样添加一行
<uc1:InputPopup ID="inputPopup" runat="server" TargetControlID="cmdAdd"/>
所以我创建了以下“InputPopup”用户控件:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="InputPopup.ascx.cs" Inherits="ABC.InputPopup" %>
<%@ Register Assembly="ABC" TagPrefix="cc1" Namespace="ABC" %>
<atk:ModalPopupExtender ID="popupExtender" runat="server" PopupControlID="pnlAddPopup" CancelControlID="cmdAbbrechen" BackgroundCssClass="modalBackground" />
<asp:Panel ID="pnlAddPopup" DefaultButton="cmdOk" runat="server" style="display: none;">
<div id="Div1" style="border-style: none; padding: 5px;" runat="server">
<table style="border: 0">
<tr>
<td style="background-color: #CCCCCC; height: 15px; text-align: right" />
</tr>
<tr>
<td style="background-color: #FFE580;">
<div style="padding: 10px;">
<cc1:SDDataLabel ID="name" runat="server" Text="Name"/>
<cc1:SDTextBox ID="txtInput" Width="300" runat="server"/>
</div>
</td>
</tr>
<tr>
<td style="background-color: #FFE580; height: 20px; text-align: center">
<cc1:SDButton ID="cmdOk" OnClick="CmdAddOkClick" CssClass="button" runat="server" />
<cc1:SDButton ID="cmdAbbrechen" CssClass="button" runat="server" />
</td>
</tr>
</table>
</div>
</asp:Panel>
此外,我还有定义属性 TargetControlID 的代码隐藏文件。 公共 TargetControlID TargetControlID { 设置{ popupExtender.TargetControlID = 值;} }
这个解决方案很好,但不起作用,因为 ModalPopupExtender 没有监听 cmdAdd,因为 cmdAdd 被放置在父控件中...... 我的问题:是否可以覆盖 ModalPopupExtender 的 TargetControlID 设置器以侦听正确的控件单击事件(在我的情况下位于父控件中的事件)? 或者我的问题还有其他解决方案吗?我读到了关于使用 $("#
以下解决方案也有效。但我更喜欢上面的“单线 UC 解决方案”,父控件中没有 ModalPopupExtender
<cc1:SDButton ID="cmdAdd" CssClass="button" runat="server" />
<!-- Popup to add brand -->
<atk:ModalPopupExtender ID="popupExtender" runat="server" TargetControlID="cmdAdd" PopupControlID="pnlAddPopup" BackgroundCssClass="modalBackground" />
<asp:Panel ID="pnlAddPopup" runat="server">
<uc1:InputPopup ID="inputPopup" runat="server"/>
</asp:Panel>
【问题讨论】:
-
我找到了正确的解决方案。一会儿我会发...
-
我找到了理想的解决方案。除了焦点设置的小问题外,该解决方案工作正常。关键问题/错误之一是我使用了 $('#ModalBehaviorId') 而不是 $find('ModalBehaviorId)。如果我理解正确的话,$() 返回一个 Ajax-Object 并且 $find() 返回一个 ModalPopupExtender 对象。为了更清楚,我将我的解决方案发布在一个新帖子中。
标签: user-controls modalpopupextender