ASP.Net: Literal vs Label

102

Chciałem tylko usłyszeć kilka autorytetów, kiedy i gdzie należy używać LITERALkontroli nad domeną LABEL.

Jak rozumiem, różnica jest następująca: A LABELmożna stylizować za pomocą <SPAN>dodanych tagów.

Osobiście uważam, że dodawanie <SPAN>tagów w moim kodzie HTML jest bardzo irytujące i nigdy nie stosuję stylów przez ASP, więc LITERALwydaje się, że to jest to, co powinno być używane przez większość czasu ... ale obawiam się, że są inne względy lub korzyści używając ETYKIETY, o której nie wiem.

Czy w 100% można zastąpić dowolne LABELs przez LITERALs, pod warunkiem, że nie stosujemy do nich stylów? Czy NIE ma innych powodów?

Chuck Le Butt
źródło

Odpowiedzi:

126

Tak, główna różnica polega na tym, że Literalkontrolki tylko renderują tekst, ale Labelkontrolki otaczają go <span>tagami (chyba że używasz AssociatedControlIDwłaściwości, w takim przypadku Labelkontrolka wyrenderuje <label>znacznik).

Tak więc etykiety można łatwiej stylizować, ale jeśli wstawiasz tylko tekst, literały są najlepszym rozwiązaniem. Kontrolki literalne mają również przydatną właściwość, Modektóra reguluje sposób renderowania tekstu. Możesz go zakodować w formacie HTML, renderować bez żadnych zmian lub usunąć „nieobsługiwane elementy języka znaczników”.

Jeśli nie stosując żadnych stylów (np za pomocą Label„s CssClasswłasności), będzie dobrze zastąpić Labelkontrole z Literalkontrolami.

Graham Clark
źródło
1
Więc dla pewności tutaj NIE ma żadnych innych rozważań? Pytam, bo piszesz "główna różnica to ...". Oczywiście nie interesuje mnie główna różnica. Dzięki.
Chuck Le Butt
2
@Django: Odpowiedź Chrisa Marisica jest naprawdę ważna; LabelKontrolki ASP.Net powinny być zawsze używane, gdy potrzebujesz <label>elementu HTML . Poza tym Etykiety renderują tekst pomiędzy <spans>, Literały nie, a Literały zapewniają większą kontrolę nad sposobem renderowania tekstu. W żadnej kontrolce nie ma żadnych specjalnych zdarzeń, a do ich zawartości można uzyskać dostęp w kodzie w dokładnie ten sam sposób (za pośrednictwem Textwłaściwości).
Graham Clark
2
PUDEŁKA! PRZYCISKI RADIOWE! Jeśli używasz Labelformantów, możesz dodać AssociatedControlIDatrybut z identyfikatorem pola wyboru lub przycisku opcji, z którym jest skojarzona etykieta. W ten sposób możesz kliknąć etykietę, a skojarzona z nią kontrolka zostanie aktywowana. Zwiększenie klikalnego obszaru docelowego również ułatwi korzystanie z interfejsu użytkownika.
Harry Pehkonen
34

Gdy masz kod podobny do

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

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

Optymalne jest użycie elementu etykiety, ponieważ poprawnie przekształci go on w labelelement html z odpowiednim foratrybutem skierowanym do pola tekstowego, tak że jeśli użytkownik kliknie etykietę, automatycznie ustawi kursor w polu tekstowym.

W przeciwnym razie użyj literału, chyba że tekst zawinięty w a spanbyłby korzystny dla stylizacji CSS.

Chris Marisic
źródło
19

wprowadź opis obrazu tutaj

Aby wyświetlić prosty tekst, sformatowany tekst lub tekst HTML tak, jak jest, zacznę od dosłownego, ponieważ jest lekki i nie emituje dodatkowych znaczników SPAN.

Zobacz ten film, który przedstawia te dodatkowe tagi.

Ale nie możemy zastosować CSS do literału, nie możemy dodać atrybutów takich jak Label1.Attributes.Add do literału. Żadnych rzeczy zorientowanych na kontener nie można osiągnąć, ponieważ literał nie jest otoczony znacznikiem SPAN.

Smutne jest również to, że wielu facetów od formularzy internetowych ASP.NET domyślnie wybiera etykietę do wyświetlania tekstu, nie wiedząc, że generuje dodatkowe znaczniki SPAN, które mogą sprawić, że HTML będzie ciężki, jeśli masz dużo etykiet.

Shivprasad Koirala
źródło
3

Różnica b / w etykieta i kontrola literału w asp.net

Prawie pod każdym względem formant Literal jest taki sam jak kontrolka Label. Obie te kontrolki służą do wyświetlania tekstu w formularzu internetowym. (Właściwość Text można ustawić w kodzie HTML lub w kodzie).

Największą różnicą jest to, że kontrolka Label zawija tekst w a spanpodczas renderowania. Każdy styl zastosowany do kontrolki Label zostanie renderowany przy użyciu stylewłaściwości span.

Na przykład następujący kod HTML

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

Zostanie renderowany jako

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

Formant Literal nie generuje żadnych otaczających tagów, więc tekst jest wyświetlany tak, jak jest:

Na przykład następujący kod HTML

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

będzie renderowany jako

Literal Control Text

Więc jeśli chcesz zastosować jakiekolwiek style do a niż użyj kontrolki Label, w przeciwnym razie użyj kontrolki Literal. Z tego powodu kontrolka Literal jest lekką kontrolką w porównaniu z kontrolką Label.

FYI: Hierarchia dziedziczenia dla klasy kontrolnej Literal to (Object => Control => Literal) , gdzie w przypadku kontrolki Label hierarchia to (Object => Control => WebControl => Label)

Rae Lee
źródło
1
Dosłowne mode="PassThrough": techrepublic.com/blog/software-engineer/ ...
PreguntonCojoneroCabrón