0

所以我正在使用 Ajax 控件工具包中的 ModalPopupExtender 控件。我的理解是,当我想将 targetControlID 设置为 Gridview 中的按钮时,我需要将 ModalPopupExtender 放在包含该按钮的模板中。就我而言:

<asp:TemplateField>
           <ItemTemplate>
               <asp:LinkButton ID="lbtnDeleteWidget" runat="server" Text="Delete" CommandName="DeleteWidget" CommandArgument="<%# Container.DataItemIndex %>"></asp:LinkButton>
           </ItemTemplate>
           <FooterStyle HorizontalAlign="Right" />
           <FooterTemplate>
           <asp:Button ID="btnAddNewWidget" runat="server" CssClass="buttonStyle" Text="Add New Widget" onclick="btnAddNewWidget_Click"/>

           <ajaxToolkit:ModalPopupExtender ID="ModalPopupExtender1" runat="server"
           BackgroundCssClass="modalBackground"
           DropShadow="true"
           OkControlID="btnSaveWidget"
           CancelControlID="aCloseX"
           PopupControlID="Panel1"
           TargetControlID="btnAddNewWidget" /> 
      </FooterTemplate>
</asp:TemplateField>

现在,这运行良好,按下按钮时会出现模式弹出窗口,一切都很好。但是,ModalPopUpExtender 有一个讨厌的习惯,即在回发时关闭模式。我的弹出窗口包含一些必须执行回发的 DropDownLists(它需要执行一些相关代码)。每当发生这种情况时,模式就会关闭。

一个(丑陋的)解决方法是使用 show() 函数。例如,每当下拉列表执行回发时,函数都会以 ModalPopupExtender1.Show(); 结束。

问题:

ModalPopupExtender1 在我当前的上下文中不存在,因为我在模板字段中定义了它,所以它可以工作。我该如何解决?我希望参考我的 ModalPopupExtender1 并使用 .show() 函数来处理回发问题。

4

2 回答 2

1

像这样搜索嵌套的模式弹出扩展器。

VB.NET

Dim ModalPopupExtender1 = CType(YourGridView.FooterRow.Findcontrol("ModalPopupExtender1"), AjaxControlToolkit.ModalPopupExtender)
ModalPopupExtender1.Show()

C#

AjaxControlToolkit.ModalPopupExtender ModalPopupExtender1 = (AjaxControlToolkit.ModalPopupExtender)YourGridView.FooterRow.Findcontrol("ModalPopupExtender1");
ModalPopupExtender1.Show();

这将暴露隐藏在项目模板中的隐藏控件。让我知道这是否有效。

于 2013-05-02T13:42:18.413 回答
0

您还可以将 modalpopup 放在网格控件之外。如果它在网格之外,它工作正常。

而且你不需要使用findcontrol,你可以直接编写Modalpopup.show() 方法来再次显示modalpopup。

试试这个,这肯定会奏效。

于 2013-05-02T14:42:13.363 回答