ASP.Net: Literal vs Label

102

Eu só queria ouvir algumas autoridades sobre quando e onde você deve usar um LITERALcontrole sobre a LABEL.

Pelo que entendi, a diferença é esta: A LABELpode ser estilizado por meio das <SPAN>tags que são adicionadas.

Eu pessoalmente acho a adição de <SPAN>tags em meu HTML muito irritante e nunca aplico estilos por meio de ASP, então LITERALparece ser o que deveria ser usado na maioria das vezes ... mas estou preocupado que haja outras considerações ou benefícios para usando um LABEL sobre ele que não conheço.

É 100% adequado substituir qualquer LABELs por LITERALs, desde que não estejamos aplicando estilos a eles? NÃO existem outras considerações?

Chuck Le Butt
fonte

Respostas:

126

Sim, a principal diferença é que os Literalcontroles apenas renderizam o texto, mas os Labelcontroles o envolvem com <span>marcas (a menos que você use a AssociatedControlIDpropriedade, caso em que um Labelcontrole renderizará uma <label>marca).

Portanto, os rótulos podem ser estilizados com mais facilidade, mas se você estiver apenas inserindo texto, os literais são o caminho a percorrer. Os controles literais também têm uma propriedade útil Modeque governa como o texto é renderizado. Você pode codificá-lo em HTML, renderizá-lo sem nenhuma alteração ou remover qualquer "elemento de linguagem de marcação não suportado".

Se você não estiver aplicando nenhum estilo (por exemplo, usando Labela CssClasspropriedade de), não haverá problema em substituir Labelcontroles por Literalcontroles.

Graham Clark
fonte
1
Então, só para ter certeza aqui, NÃO há nenhuma outra consideração? Eu pergunto porque você escreve "a principal diferença é ...". Obviamente, não estou interessado na diferença principal. Obrigado.
Chuck Le Butt
2
@Django: A resposta de Chris Marisic é muito importante; Os Labelcontroles ASP.Net devem sempre ser usados ​​quando você deseja um <label>elemento HTML . Além disso, os rótulos renderizam o texto entre <spans>, os literais não e os literais fornecem maior controle sobre como o texto é renderizado. Não há eventos especiais em nenhum dos controles e seu conteúdo pode ser acessado no code-behind exatamente da mesma maneira (por meio da Textpropriedade).
Graham Clark
2
CAIXAS DE VERIFICAÇÃO! BOTÕES DO RÁDIO! Se você usar Labelcontroles, poderá adicionar o AssociatedControlIDatributo com o ID da caixa de seleção ou botão de opção ao qual o rótulo está associado. Dessa forma, você pode clicar no rótulo, e o controle associado será ativado. Aumentar a área de destino clicável também tornará a interface do usuário mais fácil de usar.
Harry Pehkonen
34

Quando você tem um código semelhante a

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

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

É ideal usar um elemento de rótulo porque ele irá transformá-lo corretamente em um labelelemento html com o foratributo correto direcionado à sua caixa de texto, de modo que se um usuário clicar no rótulo, ele automaticamente definirá o cursor dentro do campo de texto.

Caso contrário, use o literal, a menos que ter o texto dentro de um spanseja benéfico para o estilo css.

Chris Marisic
fonte
19

insira a descrição da imagem aqui

Para exibir texto simples, texto formatado ou texto HTML como está, começarei com literal primeiro, pois é mais leve e não emite tags de SPAN extras.

Veja este video que demonstra sobre essas tags extras.

Mas não podemos aplicar CSS em um literal, não podemos adicionar atributos como Label1.Attributes.Add a um literal. Qualquer coisa orientada a contêiner não pode ser alcançada, já que literal não é circundada por uma tag SPAN.

Também é triste ver muitos caras do ASP.NET Webform escolherem, por padrão, o rótulo para exibir o texto sem saber que ele gera tags SPAN extras que podem tornar seu HTML pesado se você tiver muitos rótulos.

Shivprasad Koirala
fonte
3

Diferença de rótulo b / w e controle literal em asp.net

Em quase todos os aspectos, um controle Literal é igual a um controle Label. Ambos os controles são usados ​​para exibir texto em um formulário da web. (A propriedade Text pode ser definida no HTML ou no code-behind.)

A maior diferença é que o controle Label envolve o texto em um spanquando renderizado. Qualquer estilo aplicado ao controle Label será renderizado usando a stylepropriedade do span.

Por exemplo, o seguinte HTML

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

Será processado como

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

Um controle Literal não produz nenhuma tag circundante, então o Texto é exibido como está:

Por exemplo, o seguinte HTML

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

será processado como

Literal Control Text

Portanto, se você quiser aplicar qualquer estilo a um, use o controle Label, caso contrário, use o controle Literal. Por causa disso, o controle Literal é um controle leve, quando comparado com o controle Label.

FYI: A hierarquia de herança para a classe de controle Literal é (Object => Control => Literal) , onde, como para o controle Label, a hierarquia é (Object => Control => WebControl => Label)

Rae Lee
fonte
1
Literal mode="PassThrough": techrepublic.com/blog/software-engineer/…
PreguntonCojoneroCabrón