2009-04-29 6 views
1

Je fais une application asp.net avec une page. Dans cette page, j'ai un usercontrol défini. Cet usercontrol a un menu (trois boutons) et 3 usercontrols définis aussi. En fonction du bouton cliqué, l'un des trois contrôles userc devient Vrai ou Faux. Dans ces trois contrôles usuels, j'ai un bouton et un message, et je veux afficher le message "Ce n'est PAS une publication" quand on clique sur le bouton du menu, et quand on clique sur le bouton de la commande userc le message sera "OUI, c'est la publication !!!".Comment simuler la publication dans des contrôles usb imbriqués?

La question est que l'utilisation de la propriété "IsPostBack" de la commande usercontrol ou de la page le message ne sera jamais "Ce n'est PAS une publication" en raison du bouton cliqué du menu pour afficher le contrôle utilisateur imbriqué.

Ceci est la structure de la page:

page 
    parent usercontrol 
    menu 
    nested usercontrol 1 
     message 
     button 
    nested usercontrol 2 
    nested usercontrol 3 

Je sais que cela peut être fait en utilisant ViewState mais il existe un moyen de simuler la propriété IsPostBack ou savoir quand est le vrai usercontrol postback?

Merci.

Répondre

0

J'ai la solution à ce problème. Lorsqu'un élément se déclenche, un événement est envoyé au serveur dans la collection Request.Form. J'ai donc créé une propriété dans les contrôles utilisateur imbriqués qui vérifie s'il existe un contrôle enfant (défini dans le contrôle usercool) dans la collection Request.Form:

public bool IsUserControlPostBack 
    { 
     get 
     { 
      foreach (Control c in Controls) 
       foreach(string key in Page.Request.Form.AllKeys) 
        if(c.ClientID == key.Replace('$','_')) 
         return true; 

      return false; 
     } 
    } 

Ce code peut être une propriété de la commande usercontrol ou, si elle est appelée plusieurs fois, une variable qu'elle a définie dans l'événement OnInit de la commande usercontrol.

Questions connexes