0

プレースホルダーが異なるページがあります。それらの1つに、2番目のプレースホルダーでモーダルポップアップを開きたいリンクがあります(ajaxtoolkitを使用ModalPopupExtender):

<asp:Content ID="content1" ContentPlaceHolderID="placeholder1" Runat="Server">
   <asp:LinkButton ID="link" runat="server" Text="Popup link" />
</asp:Content>

<asp:Content ID="content2" ContentPlaceHolderID="placeholder2" Runat="Server">
   <asp:Panel ID="panel" runat="server" Text="Popup content" />
   <ajaxToolkit:ModalPopupExtender ID="popup" runat="sever"
      TargetControlID="link"
      PopupControlID="panel"
      />
</asp:Content>

上記のように実行すると、例外が発生し、popup見つからないと表示されますlink(2つの異なるプレースホルダーにあるため、理解できます)。

どうすればこれを機能させることができますか?コードの背後にある何かを考えることができますがFindControl、この関数はかなり計算コストがかかるため(特にネストされたレイアウトでは)、この関数を使用するのはあまり好きではありません。

4

1 に答える 1

1

1 つの問題は、TargetControlID と PopupControlID が逆になっていることです。TargetControlID は、「モーダル ポップ」するアイテムの ID です。この場合は、Panel1 になります。PopupControlID は、ModalPopup をトリガーするコントロールの ID です。この場合、「リンク」になります。

ただし、それが機能しない場合は、まだいくつかのオプションがあります。以下の方法を使用する前に、別の更新パネルにあるモーダルを起動しました。まったく同じ問題ではありませんが、この回避策が役立つ場合があります (ページにスクリプト マネージャーがあることを前提としています)。

  1. ID="hiddenLink" を使用して Content2 に隠し要素を作成します。
  2. ModalExtender PopupControlID="hiddenLink" を設定します
  3. content1 の "link" の分離コードで、次の onClick イベントを追加します。

    ModalPopup1.show()

  4. updatePanels を使用している場合、これにより ModalPopup がページを更新せずに AJAX 形式で表示されます。ただし、クライアントとサーバーの間で完全なポストバック データが得られます。

方法 2、JavaScript 関数を使用して Modal にも表示できます。Modalpopup 定義に behaviorID="MyModal1" (または任意の名前) を追加します。次に、リンクを変更します。

<asp:LinkButton ID="link" runat="server" Text="Popup link" OnClientClick="$get('MyModal1').show(); return false;"/>

注: 上記の例で false を返すと、.NET ページがポストバックを実行できなくなります。

于 2009-07-14T11:53:28.187 に答える