3.2 数据显示控件

在ASP.NET中,可以使用Label控件和Literal控件在Web页面上显示所需要的文本。并且这两个控件都能够在后台代码里得到很好的控制,让你可以以编程方式设置ASP.NET网页中的文本。

3.2.1 Label控件

Label控件提供了一种在ASP.NET网页中显示文本的方法,通常当希望在运行时更改页面中的文本(比如响应按钮单击)时使用Label控件。可以在设计时或者在运行时从程序中动态地设置Label控件的页面显示文本,还可以将Label控件的Text属性绑定到数据源,以在页面上显示数据库信息等。如下面的代码所示:


<asp:Label ID="lb_doc"Font-Names="微软雅黑"Font-Bold="true"

Width="80%"Text="初始文本"runat="server"></asp:Label>


上述代码中lb_doc控件将会在页面上显示“初始文本”,当然也可以通过在代码里面动态设置它的Text属性来改变这个内容。如下面的代码所示:


lb_doc.Text="我爱ASP.NET";


这样,lb_doc控件将会在页面上显示“我爱ASP.NET”。

其实,在日常开发中经常会在Label控件里显示一些非常复杂的HTML文本内容,这时就会用到如下两个方法:

1)public string HtmlDecode(string s)。该方法用于对HTML编码的字符串进行解码,并返回已解码的字符串。然后将返回已解码的字符串赋给Label控件进行显示。如下面的代码所示:


lb_doc.Text=Server.HtmlDecode(str);


2)public string HtmlEncode(string s)。该方法用于对字符串进行HTML编码并返回已编码的字符串。例如,可以将一些在网页的文本编辑器里编辑的文本使用HtmlEncode进行编码并保存到数据库,从数据库里读出文本时使用HtmlDecode进行解码并赋给Label控件进行显示。

3.2.2 Literal控件

使用Literal控件同样可以在Web页面上显示静态文本,它无须添加任何HTML元素即可将静态文本呈现在Web页上。当然,也可以通过服务器代码以编程方式静态控制文本,方法与Label控件一样。如下面的代码所示:


<asp:Literal ID="lb_doc"Text="初始文本"runat="server"></asp:Literal>


在代码里面通过Text属性控制它的文本显示,如下面的代码所示:


lb_doc.Text="我爱ASP.NET";


但它与Label控件也存在不同之处:

1)Label控件允许你向其内容应用样式;而Literal控件则不允许你向其内容应用样式。

如将Literal控件定义成如下示例就会报错,因为,Literal控件没有Font-Bold、ForeColor、Height等这些样式属性。


<asp:Literal ID="lb_doc"Text="初始文本"Font-Bold="true"

ForeColor="Beige"Height="200px"runat="server"></asp:Literal>


其实,也正因为Literal控件无法将样式应用于显示的内容,这也意味着在Web窗体设计器处于网格模式时,Literal控件无法定位。因此,Literal控件不适合于创建标题。此外,也无法使用客户端代码来确定控件的位置。

2)在页面输出时,Label控件的内容显示在<span>标签里面;而Literal控件则更为简洁,不加任何修饰。为了能够让你更好地理解这个特性,下面分别在页面上创建如下两个控件:


<asp:Label ID="Label1"runat="server"

Text="我是Label控件"></asp:Label>

<asp:Literal ID="Literal1"Text="我是Literal控件"

runat="server"></asp:Literal>


运行页面,查看页面源文件,会生成如下代码:


<div>

<span id="Label1">我是Label控件</span>

我是Literal控件

</div>


在上面生成的代码中可以发现,如果使用Label控件,则该控件被包装在HTML<span>标记中。如果使用Literal控件,将不添加<span>标记,这使你的代码更为简单。

注意 文本在Label控件或者Literal控件中显示之前并非HTML编码形式,这使得你可以在文本的HTML标记中嵌入脚本。如果控件的值是由用户输入的,请务必要对输入值进行验证,以防止出现安全漏洞,如SQL注入式攻击。