そこで、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() 関数を使用してポストバックの問題を処理したいと考えています。