Question

Quelle est la différence avec le créateur de l'étiquette et le constructeur de chaîne pour créer une table dans une classe HtmlHelper, ou en utilisant le HtmlTable?

sont-ils pas génèrent la même chose ??

Était-ce utile?

La solution

TagBuilder est une classe qui spécialement conçu pour créer des balises html et leur contenu. Vous avez raison de dire ce résultat sera de toute façon une chaîne et bien sûr, vous pouvez toujours utiliser StringBuilder et le résultat sera le même, mais vous pouvez faire des choses plus facile avec TagBuilder. Disons que vous devez générer un tag:

<a href='http://www.stackoverflow.com' class='coolLink'/>

Utilisation StringBuilder vous devez écrire quelque chose comme ceci:

var sb = new StringBuilder();
sb.Append("<a href='");
sb.Append(link);
sb.Append("' class = '");
sb.Append(ccsClass);
sb.Append("'/>");
sb.ToString();

Il est pas très cool, non? Et comparer la façon dont vous pouvez le construire en utilisant TagBuilder;

var tb = new TagBuilder("a");
tb.MergeAttribute("href",link);
tb.AddCssClass(cssClass);
tb.ToString(TagRenderMode.SelfClosing);

est-ce pas mieux?

Autres conseils

Il est juste de commodité. De ce tutoriel :

  

Vous n'avez pas vraiment besoin d'utiliser la classe TagBuilder.   Vous pouvez utiliser une classe StringBuilder   au lieu. Cependant, la classe TagBuilder   rend votre vie un peu plus facile.

Regardez les méthodes sur TagBuilder et réfléchir pour savoir s'ils vous donnent la valeur. voudriez-vous faire la même chose vous-même manuellement StringBuilder à chaque fois? Est-ce que cela échappe il fait pour vous? Attribut fusion, etc? Est-ce que le code résultant plus facile à lire, ce qui rend plus clairement que vous construisez une étiquette plutôt que d'une chaîne arbitraire?

Il y a un point que les autres réponses ont manqué jusqu'à présent. Si vous revenez TagBuilder à partir d'une méthode d'extension, vous pouvez continuer à ajouter des attributs dans votre vue. Disons que vous reveniez une table d'une aide Html et que vous voulez ajouter un attribut de classe. Si vous utilisez un StringBuilder vous devez passer la classe en tant que paramètre.

public static string Table(...., string @class)
{
    ...
    sb.AppendFormat("class='{0}", @class);
    ...
}

// In the view
<%: Html.Table(someParams, "fancy") %>

Mais l'ajout d'un attribut de classe à une balise HTML est pas la préoccupation d'une méthode d'extension qui crée une table! Si l'on passe à un modèle sémantique (TagBuilder) pour générer le code HTML, nous pouvons ajouter l'attribut de classe en dehors de la méthode de la table.

public static TagBuilder Table(....)
{
    ...
    return tag;
}

// In the view
<%: Html.Table(someParams).AddCssClass("fancy") %>

En plus de TagBuilder, vous pourriez vouloir vérifier la bibliothèque HTMLTags de FubuMVC. Il est un bien meilleur modèle pour générer une page HTML. J'ai quelques plus de détails sur le blog.

  

sont-ils pas génèrent la même chose ??

Oui, bien sûr, mais cela ne devrait pas être un moyen de dissuasion, devrait-il? Une classe est conçue pour quelque chose de plus spécifique que l'autre, il offre un niveau plus élevé de commodité.

Je pourrais demander: pourquoi utiliser un StringBuilder? Pourquoi pas un List<char>? Je ne pouvais pas générer la même chose de plus?

Franchir une étape supplémentaire: pourquoi même un List<char>? Pourquoi ne pas simplement un char[], le redimensionnement / la manipulation dont je peux me contrôler? Je peux toujours créer totalement un string d'un char[].

tout ce que je vraiment besoin En fait, est un char* et un int (pour la longueur). Droit?

Mon point est juste que si une classe est disponible pour des fonctionnalités spécifiques que vous pouvez utiliser, il est logique d'utiliser si vous me demandez.

Comme il est mentionné dans les autres postes, TagBuilder apporte une certaine commodité. Mais vous devriez considérer que TagBuilder et StringBuilder peut ne produit pas le même résultat. TagBuilder applique html encodage, mais StringBuilder ne fonctionne pas. Il est donc plus sûr d'utiliser TagBuilder pour surmonter vulnerabilies qui peuvent être exploitées par une attaque XSS.

Ne pas oublier de faire HTML le codage des valeurs si vous utilisez StringBuilder. J'espère TagBuilder faire automatiquement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top