10
votes

Ajouter une classe CSS supplémentaire par programme

J'ai une zone de texte avec une classe CSS appelée "requise". Lorsqu'un utilisateur cliquez sur un bouton, j'aimerais ajouter une classe CSS supplémentaire à la zone de texte appelée «erreur» sans supprimer la classe «requise». Je veux accomplir cela de Code-derrière.


5 commentaires

Ce serait beaucoup plus facile avec le code côté client. Y a-t-il une raison spécifique de vouloir le faire dans le codebehind?


Ce n'est pas vraiment difficile (d'une perspective de développement) de Code-derrière. Mais vous avez raison d'être facile du côté du client et de ne pas nécessiter un aller-retour sur le serveur.


@Ken il veut faire cela onglick.


Le but pour cela est la validation du côté serveur


Ah qui efface les choses considérables. La meilleure façon de le faire est de valider le formulaire entier sur Soumettre. En tant que note latérale, vous devez valider sur le côté serveur et client.


4 Réponses :


13
votes

Vous pouvez définir la propriété CSSClass de la commande Textbox ASP.NET. Pour ajouter plus d'une classe CSS pour un élément, séparez-la avec un espace: xxx pré>

Vous pouvez la mettre dans votre gestionnaire d'événements OnClick: P>

void MyTextBox_Click(Object sender, EventArgs e) {
    MyTextBox.CssClass = "class1 class2";
}


4 commentaires

Hah je ne savais pas que tu pouvais faire ça. Et si je veux supprimer la deuxième classe CSS? Mytextbox.cssclass = "classe1"; ??


Ok, mais si je ne sais pas ce que l'autre Cssclass est. Je serai fait avec le codage et donnez le dos aux concepteurs .. Dans ce cas, je suis Hafta savoir quel est le nom de la CSSclass. Je ne préfère pas travailler comme ça puisqu'il est codé dur. Je ne peux pas faire textbox.cssclas + = "classe2";


Oui, il suffit de définir la propriété sur la seule classe. Vous venez vraiment de définir une valeur de chaîne de ce qui apparaîtra dans l'attribut de classe pour le contrôle.


Si vous faites textbox.cssclass + = "CLASS2" , vous vous retrouverez avec class1class2 dans votre attribut de classe. J'écrirais une méthode AddClass et une méthode Removeclass si vous souhaitez faire ce nettoyant. Peut-être comme méthodes d'extension sur la classe WebControl.



4
votes

Voici un moyen de supprimer la classe CSS à l'aide d'une fonction. L'ajout d'une classe serait très similaire.

public void RemoveCssClass(string className)
{
    string[] splitClasses = TextButton.CssClass.Split(' ');
    string separator = "";

    foreach (string _class in splitClasses)
    {
        if (_class != className)
        {
            TextButton.CssClass += separator + _class;
            separator = " ";
        }
    }

    if (TextButton.CssClass == className)
        TextButton.CssClass = "";
}


1 commentaires

C'est assez mauvais code. Que diriez-vous de quelque chose comme Var LSC = SplitClasses.tolist (); lsc.remove (nom de classe); Textbutton.cssclass = string.join ("", lsc);



17
votes

J'ai décidé de créer des méthodes d'extension pour WebControl pour avoir une solution générique. Voici mon code:

public static class WebControlExtensions
{
    public static void AddCssClass(this WebControl control, string cssClass)
    {
        if (string.IsNullOrEmpty(control.CssClass))
        {
            control.CssClass = cssClass;
        }
        else
        {
            string[] cssClasses = control.CssClass.Split(' ');
            bool classExists = cssClasses.Any(@class => @class == cssClass);

            if (!classExists)
            {
                control.CssClass += " " + cssClass;
            }
        }
    }

    public static void RemoveCssClass(this WebControl control, string cssClass)
    {
        if (!string.IsNullOrEmpty(control.CssClass))
        {
            string[] cssClasses = control.CssClass.Split(' ');
            control.CssClass = string.Join(" ", cssClasses.Where(@class => @class != cssClass).ToArray());
        }
    }
}


0 commentaires

1
votes

Voici une méthode C # simple pour ajouter ou supprimer une cssclass en une gamme WebControl ...

    public static void SetOrRemoveCssClass( WebControl control, string className, bool adding )
    {
        string[] splitClasses = control.CssClass.Split(' ');

        bool hasNow = splitClasses.Contains( className );
        if ( adding && !hasNow )
        {
            control.CssClass += " " + className;
        }
        else if ( !adding && hasNow )   // remove the CssClass attribute
        {
            control.CssClass = control.CssClass.Replace( className, "");
        }
        control.CssClass = control.CssClass.Replace("  "," ").Trim();
    }


0 commentaires