Label和Literal两个控件都用于运行时状态页面文本的显示,要显示的内容在控件的Text属性中设置。
代码:
<asp:Label ID="label1" runat="server" Text="I'm a label." />
那么,同样是显示文本信息,为什么要有两个控件那,这两个控件又有什么区别那?可以先来做一个简单的实验。创建一个包含label和Literal的页面,并查看在客户端生成的代码。
I'm a literal.
<span id="label1">I'm a label.</span>
</div>
这是和连个控件相关的部分。由此可以看到,Label控件的内容被呈现在一个HTML的<span>标签中,而Literal则是直接显示的文本,没有被任何标签包含。
那么<span>标签有什么好处那,它可以允许你控制Label控件中的文本格式,因此,Label控件中拥有一些格式化自身文本的属性,例如:Backcolor、BorderColor、BorderStyle、BorderWidth、CssClass、Font、ForeColor、Style、ToolTip等属性。而这些属性Literal都没有。通常情况下,建议避免使用格式化属性而是用CSS来格式化Label控件的输出内容。
一个简单的示例:


<head runat="server">
<style type="text/css">
div
{
padding:12px;
}
.labelStyle
{
color:Yellow;
background-color:Silver;
border: Solid 3px Yellow;
}
</style>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="Label"
CssClass="labelStyle"></asp:Label>
</div>
</form>
</body>
</html>
使用Label标签的另一个用处是可以用它来标注一个HTML表单字段。Label控件拥有属性AssociatedControlID,可以设置此属性来指向表示表单字段的控件。
一个简单的示例:


<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="lblName"
AssociatedControlID="txtName"></asp:Label>
<asp:TextBox ID="txtName" runat="server"></asp:TextBox>
</div>
</form>
</body>
查看客户端源码可以看到,在设置了AssociatedControlID属性后,Label控件将呈现成HTML中的<label>标签而不再是<span>标签。


<form name="form1" method="post" action="LabelDemo.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE3OTIzNjY1MThkZOUGW3uywF+ry+u9uxe/q+3vlktc" />
</div>
<div>
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAgKB3pzUBwLEhISFC6Ey/IdW6u1ZYxE73J7V9pdQ20qi" />
</div>
<div>
<label for="txtName" id="Label1">lblName</label>
<input name="txtName" type="text" id="txtName" />
</div>
</form>
</body>
而Literal控件的作用之一是用来在<title>中是用,因为如果用Label的话,在客户端生成的代码时不符合XHTML规则的。Literal只支持一个Mode属性。Mode属性用于编码HTML中的内容。它接受下列三个值:
PassThrough:显示控件中的内容而不进行任何编码。
Encode:在编码HTML内容后在西安市控件的内容。
Transform:在清除请求设备不支持的标记后在显示控件的内容。
示例:


<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Literal ID="Literal1" runat="server" Text="<hr />"
Mode="PassThrough"></asp:Literal>
<br />
<br />
<asp:Literal ID="Literal2" runat="server" Text="<hr />"
Mode="Encode"></asp:Literal>
<br />
<br />
<asp:Literal ID="Literal3" runat="server" Text="<hr />"
Mode="Transform"></asp:Literal>
</div>
</form>
</body>
</html>
而显示的结果如下图:
可以看到,第一个Literal控件显示一条水平线,第二个显示一个未解释的标签,第三个也显示了一条水平线。但如果放在一个不能解释<hr >浏览器上,则第三行就不会显示,因为<hr>标签会被去掉。