0 votes

Interaction Javascript entre les contrôles web ASP.NET

J'ai un UserControl A qui contient

  • un menu déroulant
  • un espace réservé

Au moment de l'exécution, l'espace réservé sera rempli avec un UserControl B.

Il y a des moments où j'ai besoin de piéger l'événement javascript onchange dans la liste déroulante pour appeler une fonction javacript dans B (pour faire une mise à jour de B côté client). Quelle est la meilleure conception/pratique pour faire cela ?

La méthode naïve consiste à faire de l'asp:dropdownlist un membre public et à l'envoyer dans une méthode publique de B :

// In controlling code
...
userControlB.Initialize(userControlA.TheDropDownList);
...

// In usercontrol B
public void Initialize(DropDownList dropdownFromA)
{
    dropdownFromA.Attributes.Add("onchange", "myBfunction()");
}

Mais cette approche sent le roussi. J'aimerais que le couplage entre A et B soit le plus lâche possible. Une meilleure idée ?

3voto

JoshBerke Points 34238

Pour qu'ils soient vraiment découplés, vous pouvez introduire un modèle d'observateur tel que celui qui est décrit ci-dessous. aquí . Je voudrais que le menu déroulant enregistre son propre événement de changement qui notifierait l'observateur qu'un changement s'est produit. Ensuite, si d'autres contrôles sur le client sont intéressés, ils s'inscriront pour être notifiés lorsqu'une observation spécifique est faite.

Editer

Vous pourriez nommer les variables sur la base d'un nom logique pour l'observation, puis vous vérifieriez que l'observateur existe avant de vous enregistrer auprès de lui.

Un système différent que j'ai vu utilisé serait plus comme un distributeur d'événements, essentiellement lorsque vous vous abonnez vous fournissez un nom pour l'événement, puis vous déclenchez vous incluez deux arguments le nom de l'événement, et les données pour l'événement. Dans ce modèle, il n'y aurait qu'un seul distributeur par page.

0voto

Lazarus Points 17526

Dans le DOM, je suis presque sûr que tous les contrôles sont accessibles, donc rendre le menu déroulant public n'est pas vraiment pertinent, en particulier parce que le contrôle a et le contrôle b sont membres de la même page et sont donc accessibles l'un à l'autre dans votre code-behind.

Je pense qu'une approche plus souple consisterait à faire en sorte que le contrôle B enregistre sa méthode en tant qu'auditeur d'événement sur l'événement de changement du contrôle a. Je ne suis pas sûr qu'il soit possible d'avoir un couplage plus lâche entre deux contrôles dont l'un dépend des modifications apportées par l'autre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X