Comment puis-je transmettre des données d'une page aspx à une fenêtre contextuelle modale ascx ?

StackOverflow https://stackoverflow.com/questions/12671

  •  08-06-2019
  •  | 
  •  

Question

Je suis relativement nouveau sur ASP.NET et j'essaie d'apprendre comment les choses se font.Je viens d'un milieu C#, donc la partie code-behind est facile, mais penser comme un développeur Web n'est pas familier.

J'ai une page ASPX qui contient une grille de cases à cocher.J'ai un bouton codé via un événement Button_Click pour collecter une liste des lignes vérifiées et créer une variable de session à partir de cette liste.Le même bouton est référencé (via TargetControlID) par ModalPopupExtender de ma page ascx qui contrôle le panneau sur la page ascx.

Lorsque vous cliquez sur le bouton, la fenêtre contextuelle modale s'ouvre mais l'événement Button_Click n'est jamais déclenché, donc le modal n'obtient pas ses données de session.

Étant donné que les deux pages sont séparées, je ne peux pas appeler ModalPopupExtender depuis le code aspx.cs, je ne parviens pas à accéder à la liste des cases à cocher depuis le code ascx.cs et je ne vois pas de moyen de renseigner ma variable de session. puis activez par programme un autre bouton ou contrôle caché qui ouvrira ensuite ma fenêtre contextuelle modale.

Des pensées?

Était-ce utile?

La solution

Tout un fichier usercontrol(.ascx) est un ensemble de contrôles que vous avez regroupés pour fournir des fonctionnalités réutilisables.Les contrôles qui y sont définis sont toujours ajoutés à la collection de contrôles de la page (.aspx) pendant le cycle de vie de la page.ModalPopupExtender utilise javascript et dhtml pour afficher et masquer les contrôles côté client usercontrol.Ce que vous voyez, c'est que l'événement click est géré côté client par ModalPoupExtender et qu'il annule la publication sur le serveur.Il s’agit du comportement par défaut prévu par la conception.Vous pouvez certainement accéder à la collection de contrôles de la page à partir du code-behind de votre contrôle utilisateur, car tout cela fait partie de la même arborescence de contrôle.Utilisez simplement la méthode FindControl(xxx) de n’importe quel contrôle pour rechercher l’enfant dont vous avez besoin.

Autres conseils

Après quelques recherches suite à la réponse de DancesWithBamboo, j'ai compris comment le faire fonctionner.
Un exemple de référence à ma page ascx dans ma page aspx :

<uc1:ChildPage ID="MyModalPage" runat="server" />

Le code aspx-behind pour récupérer et ouvrir le ModalPopupExtender (nommé modalPopup) ressemblerait à ceci :

AjaxControlToolkit.ModalPopupExtender mpe = 
    (AjaxControlToolkit.ModalPopupExtender) 
          MyModalPage.FindControl("modalPopup");
mpe.Show();

Désolé, mais je suis confus.Vous ne pouvez pas appeler directement un ascx, alors...

Votre code modal est-il que vous appelez depuis la même page, comme un panneau caché, etc. ;

Ou s'agit-il d'une autre page ASPX que vous appelez lors d'un événement de clic ?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top