2009-07-06 9 views
0

J'ai une page avec différents espaces réservés. Dans l'un d'eux, j'ai un lien que je veux ouvrir une fenêtre contextuelle modale dans un second espace réservé (en utilisant le ajaxToolkit ModalPopupExtender):Comment avoir un lien dans un espace réservé ouvrir un ModalPopup dans un espace réservé différent?

<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> 

Quand vous faites comme ci-dessus, il me tire une exception, en disant que popup ne peut pas trouver link (que je comprends, car ils sont dans deux espaces réservés différents).

Comment est-ce que je peux faire ce travail? Je peux penser à quelque chose trouver FindControl dans le code derrière, mais je n'aime pas vraiment utiliser cette fonction, car il est assez coûteux en calcul (en particulier avec ma mise en page imbriquée).

Répondre

1

Un problème est que vos TargetControlID et PopupControlID sont inversés. TargetControlID est l'ID de l'élément que vous voulez 'Modal Pop', dans votre cas ce serait Panel1. Le PopupControlID est l'ID du contrôle qui déclencherait le ModalPopup, dans votre cas ce serait "Link"

Mais vous avez encore quelques options si cela ne fonctionne pas, j'ai tiré un modal situé dans un différent mettre à jour le panneau avant d'utiliser la méthode ci-dessous. Bien que pas exactement le même problème, cette solution de contournement peut vous aider (je suppose que vous avez un gestionnaire de script sur votre page).

  1. Créer un élément caché Content2 avec ID = "hiddenLink"
  2. Définissez votre ModalExtender PopupControlID = "hiddenLink"
  3. Dans le CodeBehind pour "lien" dans content1, ajoutez un événement onClick avec les éléments suivants

    ModalPopup1.show()

  4. Si vous utilisez UpdatePanels, cela entraînera la ModalPopup à afficher dans la mode AJAX sans la page refresh.But vous obtenez toujours une postbac complète k worht de données entre le client et le serveur.

Méthode 2, vous pouvez également utiliser une fonction javascript pour afficher Modal. Ajoutez un behaviorID = "MyModal1" (ou ce que vous voulez appeler) à votre définition Modalpopup. Modifiez ensuite votre lien:

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

Note: return false dans l'exemple ci-dessus empêche la page .NET d'effectuer une publication.

+0

Merci pour votre réponse! Le mélange entre TargetControlID et PopupControlID était une faute de frappe, mais merci de le corriger. J'aime la méthode 2, mais pourquoi avons-nous besoin de l'étape 1. et 2.? – Wookai

+0

Dans mon expérience, le modalPopup aime avoir un targetControlID. J'ai eu des erreurs de compilation sans cela. Donc, étapes 1 et 2 pour la méthode 1, je crée un contrôle caché qui ne fait rien mais rend le modalPopup heureux lors de la compilation :) Il pourrait aussi avoir été une limitation de la boîte à outils AJAX plus tôt ... – Tommy

+0

ah - ceux-ci sont faciles à se mêler ne sont-ils pas? Je voulais dire qu'il aime avoir un popUpControlID .... etc etc etc – Tommy

Questions connexes