サイト全体に存在する必要がある 3 種類の ajax ポップアップがあります。それぞれのユーザーコントロールを作成し、パネルとモーダルポップアップエクステンダーをそれぞれの中に配置するだけでよいと思っていましたが、うまくいかないようです。誰かがこれを以前に試したことがありますか、または異なるページのポップアップごとにコードの重複を避ける方法についての推奨事項はありますか? ありがとう!
3 に答える
1 つのオプションは、ポップアップを asp.net ユーザー コントロール (.ascx ページ) に記述し、ポップアップが必要なページに含めることです。ポップアップを表示する ascx ページにパブリック メソッドを用意し、必要に応じて親ページから呼び出します。親ページに既にスクリプト マネージャーがある場合、ascx ページに 2 番目のスクリプト マネージャーを作成することはできませんが、それ以外の場合は、これが機能しなくなるようなことがあってはなりません。お役に立てれば!
編集:これが私のモーダルポップアップエクステンダーコントロールの外観です...
<cc1:ModalPopupExtender
ID="mpeClassroom"
BackgroundCssCLass="modalBackground"
runat="server"
CancelControlID="lbClose"
OnOkScript="onOk()"
TargetControlID="Button1"
PopupControlID="pnlClassroom">
</cc1:ModalPopupExtender>
コード ビハインド ページでは、メソッドは mpeClassroom.Show(); を呼び出すだけです。
TrgetControlID としての隠しリンクの問題は次のとおりです。可視性をfalseに設定すると、サーバーもレンダリングしません。その場合、PopExtender はページ上でコントロールを見つけることができません。
可視性を false に設定する代わりに、display:none でスタイルを適用してみてください。これはうまくいくはずです!
ああ、私が信じているユーザーコントロールに関する問題を理解しました。
ModalPopUpExtender では、TargetID プロパティを設定する必要があります。そうしないと、エラーが発生します。これは UserControl にあるため、何もしないダミーのリンク ボタンを作成し、visible プロパティを false に設定しました。
<asp:LinkButton ID="lnkBlank" runat="server" Visible="false" />
<asp:Panel ID="plContainer" style="display: none;" runat="server">
Hello?
</asp:Panel>
<cc1:ModalPopupExtender ID="mpe" runat="server"
BehaviorID="test"
TargetControlID="lnkBlank"
PopupControlID="plContainer" />
どうやらそれは評価されておらず、visible プロパティを true に設定した瞬間に機能し始めました。ほとんどのポップアップはページに関する複数のリンクから呼び出される可能性があるため、TargetID の理由が何であるかはわかりません。おそらく、このコントロールがどのように使用されることになっているのか、まだ完全には明確ではありません。