0 votes

Creating my own Contrôle de lien hypertexte de serveur Web - problèmes de remplacement de l'attribut de classe

Je suis en train d'écrire des contrôles de serveur web pour faciliter le travail avec des contrôles et widgets de base de jQuery UI. Tout ce que je dois faire à ce stade est d'ajouter quelques classes CSS supplémentaires dans les liens hypertexte.

Le code ci-dessous est mon contrôle de serveur web.

using System;
using System.ComponentModel;
using System.Security.Permissions;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Fusion.UI.Controls
{
    [
    ToolboxData("<{0}:Hyperlink runat=\"server\">")
    ]
    public class Hyperlink : System.Web.UI.WebControls.HyperLink
    {
        protected override void AddAttributesToRender(HtmlTextWriter writer)
        {
            writer.AddAttribute(HtmlTextWriterAttribute.Class, "fg-button ui-state-default ui-corner-all");

            // Call underlying renderer
            base.AddAttributesToRender(writer);
        }
    }
}

Cela fonctionne bien et génère un lien hypertexte avec les classes CSS supplémentaires. Cependant, si je spécifie également le CssClass, cela finit par créer un double attribut de classe:

Lien

Qui génère le code HTML suivant :

Lien

Aide ! Comment puis-je empêcher que cela se produise ?

5voto

PHeiberg Points 15909

Attribuez la classe css à la propriété CssClass héritée et laissez la classe de base gérer le rendu.

protected override void OnPreRender(EventArgs e)
{
    base.OnPreRender(e);
    CssClass = "fg-button ui-state-default ui-corner-all";
}

1voto

iJK Points 1450

Je pense que c'est à cause de cette ligne

base.AddAttributesToRender(writer);

Il crée un attribut "class" si l'attribut CssClass a une valeur. Puisque le code ci-dessus rend tous les attributs spécifiés dans le contrôle.

Essayez de rendre le contrôle vous-même. De cette façon, votre code contrôle quels attributs sont rendus et dans le cas du css, vous pouvez vérifier s'il a déjà une valeur ou non. S'il a une valeur, vous pouvez l'ajouter ou le supprimer, selon ce qui convient le mieux à vos besoins.

J'espère que cela vous aidera.

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