2009-12-03 4 views
0

Je souhaite mettre en surbrillance tous les contrôles utilisateur utilisés dans une page en ajoutant une bordure autour d'elle. Nous faisons cela pour faciliter le débogage. Je pourrais remplacer la méthode RenderControl dans la classe de base du contrôle utilisateur pour le faire facilement, mais nous avons beaucoup de contrôles utilisateur (héritage) qui n'utilisent pas la classe de base. J'ai ensuite pris une approche différente. J'ai essayé de parcourir les contrôles de page dans la méthode PreRender de la classe de base de page, qui est utilisée par toutes les pages, et d'ajouter un div avec une bordure à tous les contrôles utilisateur. Mais j'ai trouvé qu'il n'est pas possible d'ajouter ou de retirer de la collection de contrôle si elle contient des blocs de code (c'est-à-dire <% ...%>).Mettre en surbrillance toutes les commandes utilisateur dans une page ASP.NET

Des suggestions?

grâce

Répondre

0

Voici comment vous pouvez mettre en évidence un contrôle d'entrée actif qui a le focus. Vous devez gérer la onfocus et onblur événements côté client de l'entrée controls.and appliquer ou supprimer le style css au contrôle en définissant les contrôles className attribut

Ajouter ceci à votre fichier css:

.highlight 
{ 
    background-color: #fefbd2; /*highlight with yellow*/ 
    color: #000080;   /*make text blue*/ 
} 

Dans votre répertoire App_Code créer une classe d'aide comme

public static class Helpers 
{ 
    /// <summary> 
    /// Adds the onfocus and onblur attributes to all input controls found in the specified parent, 
    /// to change their apperance with the control has the focus 
    /// </summary> 
    public static void SetInputControlsHighlight(Control container, string className, bool onlyTextBoxes) 
    { 
    foreach (Control ctl in container.Controls) 
    { 
    if ((onlyTextBoxes && ctl is TextBox) || 
      (!onlyTextBoxes && (ctl is TextBox || ctl is DropDownList || 
      ctl is ListBox || ctl is CheckBox || ctl is RadioButton || 
      ctl is RadioButtonList || ctl is CheckBoxList))) 
    { 
     WebControl wctl = ctl as WebControl; 
     wctl.Attributes.Add("onfocus", string.Format("this.className = '{0}';", className)); 
     wctl.Attributes.Add("onblur", "this.className = '';"); 
    } 
    else 
    { 
     if (ctl.Controls.Count > 0) 
      SetInputControlsHighlight(ctl, className, onlyTextBoxes); 
    } 
    } 
    } 
} 

Ensuite, il suffit o verride la méthode OnLoad de n'importe quelle page.

protected override void OnLoad(EventArgs e) 
{ 
    Helpers.SetInputControlsHighlight(this, "highlight", false); 
    base.OnLoad(e); 
}