ASP.Net: littéral vs étiquette

102

Je voulais juste entendre certaines autorités sur quand et où vous devriez utiliser un LITERALcontrôle sur un fichier LABEL.

Si je comprends bien, la différence est la suivante: A LABELpeut être stylisé via les <SPAN>balises qui sont ajoutées.

Personnellement, je trouve que l'ajout de <SPAN>balises dans mon HTML est très ennuyeux et n'applique jamais de styles via ASP, et LITERALsemble donc être ce qui devrait être utilisé la plupart du temps ... mais je crains qu'il y ait d' autres considérations ou avantages à en utilisant un LABEL dessus que je ne connais pas.

Est-il 100% correct de remplacer des LABELs par des LITERALs, à condition que nous ne leur appliquions pas de styles? N'y a-t-il PAS d'autres considérations?

Chuck Le Butt
la source

Réponses:

126

Oui, la principale différence est que les Literalcontrôles ne rendent que le texte, mais les Labelcontrôles l'entourent de <span>balises (sauf si vous utilisez la AssociatedControlIDpropriété, auquel cas un Labelcontrôle rendra une <label>balise).

Ainsi, les étiquettes peuvent être stylisées plus facilement, mais si vous insérez simplement du texte, les littéraux sont la voie à suivre. Les contrôles littéraux ont également une propriété pratiqueMode qui régit la façon dont le texte est rendu. Vous pouvez le faire encoder en HTML, ou le rendre sans aucune modification, ou supprimer les "éléments de langage de balisage non pris en charge".

Si vous n'appliquez aucun style (par exemple en utilisant Labella CssClasspropriété de), ce sera bien de remplacer les Labelcontrôles par des Literalcontrôles.

Graham Clark
la source
1
Donc, juste pour être sûr ici, il n'y a AUCUNE autre considération du tout? Je demande parce que vous écrivez "la principale différence est ...". Je ne suis évidemment pas intéressé par la différence principale. Merci.
Chuck Le Butt
2
@Django: La réponse de Chris Marisic est vraiment importante; Les Labelcontrôles ASP.Net doivent toujours être utilisés lorsque vous souhaitez un <label>élément HTML . En dehors de cela, les libellés rendent le texte entre <spans>, les littéraux non, et les littéraux vous donnent un meilleur contrôle sur la façon dont le texte est rendu. Il n'y a aucun événement spécial sur les deux contrôles et leur contenu est accessible dans le code-behind exactement de la même manière (via la Textpropriété).
Graham Clark
2
CHECKBOXES! BOUTONS RADIO! Si vous utilisez des Labelcontrôles, vous pouvez ajouter l' AssociatedControlIDattribut avec l'ID de la case à cocher ou du bouton radio auquel l'étiquette est associée. De cette façon, vous pouvez cliquer sur l'étiquette, et le contrôle associé sera activé. L'agrandissement de la zone cible cliquable rendra également l'interface utilisateur plus facile à utiliser.
Harry Pehkonen
34

Lorsque vous avez un code similaire à

<asp:Label EnableViewState="false" ID="Label8" runat="server" 
        AssociatedControlID="txtEmail">Email Address:</asp:Label>

<asp:TextBox ID="txtEmail" runat="server"></asp:TextBox>

Il est optimal d'utiliser un élément d'étiquette car il le transformera correctement en un labelélément html avec le bonfor attribut ciblant votre zone de texte, de sorte que si un utilisateur clique sur l'étiquette, il place automatiquement son curseur dans le champ de texte.

Sinon, utilisez le littéral à moins que le texte enveloppé dans un spanne soit avantageux pour le style css.

Chris Marisic
la source
19

entrez la description de l'image ici

Pour afficher du texte simple, du texte formaté ou du texte HTML tel quel, je commencerai par littéral en premier car il est léger et n'émet pas de balises SPAN supplémentaires.

Regardez cette vidéo qui montre ces balises supplémentaires.

Mais on ne peut pas appliquer CSS sur un littéral, on ne peut pas ajouter d'attributs comme Label1.Attributes.Add à un littéral. Aucune chose orientée conteneur ne peut être réalisée car littéral n'est pas entouré d'une balise SPAN.

Il est également triste de voir que beaucoup de gars ASP.NET Webform choisissent par défaut l'étiquette pour afficher le texte sans savoir qu'elle génère des balises SPAN supplémentaires qui peuvent alourdir votre HTML si vous avez beaucoup d'étiquettes.

Shivprasad Koirala
la source
3

Différence entre l'étiquette et le contrôle littéral dans asp.net

Dans presque tous les cas, un contrôle Literal est identique à un contrôle Label. Ces deux contrôles sont utilisés pour afficher du texte sur un formulaire Web. (La propriété Text peut être définie dans le HTML ou dans le code-behind.)

La plus grande différence est que le contrôle Label enveloppe le texte dans un spanlors du rendu. Tout style appliqué au contrôle Label sera rendu à l'aide de la stylepropriété duspan .

Par exemple, le code HTML suivant

<asp:Label ID="Label1" runat="server"  Text="Label Text"
ForeColor="Red" Font-Bold="true" ></asp:Label>

Sera rendu comme

<span id="Label1" style="color:Red;font-weight:bold;">Label Text</span>

Un contrôle Literal ne génère aucune balise environnante, le texte est donc affiché tel quel:

Par exemple, le code HTML suivant

<asp:Literal ID="Literal1" runat="server" 
Text="Literal Control Text"></asp:Literal>

sera rendu comme

Literal Control Text

Donc, si vous souhaitez appliquer des styles à un contrôle que, utilisez Label, utilisez le contrôle Literal. Pour cette raison, le contrôle Literal est un contrôle léger, par rapport au contrôle Label.

Pour info: la hiérarchie d'héritage pour la classe de contrôle Literal est (Object => Control => Literal) , où comme pour le contrôle Label, la hiérarchie est (Object => Control => WebControl => Label)

Rae Lee
la source
1
Littéral mode="PassThrough": techrepublic.com/blog/software-engineer/…
PreguntonCojoneroCabrón