1、Literal的一般用法,与Label对比
MSDN上的解释:
使用 System.Web.UI.WebControls.Literal 控件在网页上保留显示文本的位置。Literal 控件与 Label 控件类似,但 Literal 控件不允许对所显示的文本应用样式。
可以通过设置 Text 属性,以编程方式控制在控件中显示的文本。
Literal Web 服务器控件介绍
可以使用 Literal Web 服务器控件将静态文本呈现在 Web 页上并使用服务器代码操纵该文本。与 Label Web 服务器控件不同,Literal 控件不将任何
HTML 元素添加到文本上。
例如,您可能想要创建可以编程方式操纵的文本元素的简单垂直列表。可以通过将 Label 控件或 Literal 控件的 Text 属性设置为要发送到 Web 页的 HTML 内
容,创建上述简单垂直列表。如果使用 Label 控件,则该控件被包装在 HTML <span> 标记中。<span> 不以任何显而易见的方式影响该页的呈现。如果使用
Literal 控件,将不添加 <span> 标记,这使您的代码更为简单。
您无法将样式应用于 Literal 控件的内容。这意味着在 Web 窗体设计器处于网格模式时,Literal 控件无法定位。因此,Literal 可能不适合于创建标题。此外,
您无法使用客户端代码确定控件的位置。
向 Web 窗体页添加 Literal Web 服务器控件
在您要以编程方式设置文本而不是添加额外的 HTML 标记时,向页面添加 Literal Web 服务器控件。
注意:如果想显示静态文本,可以使用 HTML 呈现它;不需要 Literal 控件。只 有在需要更改服务器代码中的内容时才使用 Literal 控件 。
向 Web 窗体页添加 Literal 控件
在“设计”视图中,从“工具箱”的“Web 窗体”选项卡将 Literal 控件拖到页面上。
下面的示例显示一个简单页,该页在运行时显示标题新闻。该页的主体(包括 Literal 控件)类似于下面的代码:
<body>
<form runat="server">
<H1><asp:Literal id="Headline" runat=server /></H1>
</form>
</body>
将代码添加到页面上以在运行时设置控件的 Text 属性。
下面的示例显示如何以编程方式设置 Literal 控件的文本。
// C#
private void Page_Load(object sender, System.EventArgs e)
{
Headline.Text = "New Web Site Announced";
}
2、Literal控件的巧妙用法,这里我把它做成了一个类似Menu控件,实现菜单的功能。
很简单,就是设置其Text值就可以了,假如Literal的ID为“litMenu”,那么代
码如下
litMenu.Text =
"<table border=/"0/" cellspacing=/"0/" cellpadding=/"0/">
<tr>
<td class=/"Tab1/" style=/"width:114px;/" οnclick=/"window.location.href='/onlineUserView.aspx?type=1';/">在线人员</td>
<td class=/"Tab2/" style=/"width:114px;/" οnclick=/"window.location.href='/SMS/SMSList.aspx?type=2';/">收件箱</td>
<td class=/"Tab1/" style=/"width:114px;/" οnclick=/"window.location.href='/SMS/SMSList.aspx?type=3';/">草稿箱</td>
<td class=/"Tab1/" style=/"width:114px;/" οnclick=/"window.location.href='/SMS/SMSList.aspx?type=4';/">已发送</td>
<td class=/"Tab1/" style=/"width:115px;/" οnclick=/"window.location.href='/SMS/SMSList.aspx?type=5';/">已删除</td>
</tr>
</table>"
解析:很明显,这里是把其Text的值设置为了一个Table而已,而在Table中的单元格进行菜单的点击链接。呵呵好玩吧!
3、Literal控件作为通用性Menu
如果想把Literal控件作为通用性Menu,那就写成一个公共类,然后就调用。假如在一个Menu.cs类里定义
public static string[] sName4 = new string[5] { "在线人员","收件箱", "草稿箱", "已发送", "已删除" }; //定义菜单数组的名称
public static string[] sUrl4 = new string[5] { "/onlineUserView.aspx?type=1", "/SMS/SMSList.aspx?type=2", "/SMS/SMSList.aspx?type=3",
"/SMS/SMSList.aspx?type=4", "/SMS/SMSList.aspx?type=5" }; //定义每个菜单对应的链接的数组
/// <summary>
/// 通用Tab
/// </summary>
/// <param name="litMenu">Literal的ID</param>
/// <param name="sName">菜单数组名称</param>
/// <param name="sUrl">链接的数组的名称</param>
/// <param name="iSelect">选中的第几个菜单项</param>
/// <param name="sParameter"></param>
public static void LoadMenuCommon(System.Web.UI.WebControls.Literal litMenu, string[] sName, string[] sUrl, int iSelect,string sParameter)
{
System.Text.StringBuilder sb = new StringBuilder();
sb.Append("<table border=/"0/" cellspacing=/"0/" cellpadding=/"0/">")
.Append("<tr>");
for (int i = 0; i < sName.Length; i++)
{
string sClassName = (i + 1) == iSelect ? "Tab2" : "Tab1"; //选中的菜单用CSS中的类"Tab2",否则用"Tab1"
int iWidth = i == (sName.Length - 1) ? 115 : 114;
sb.Append(string.Format("<td class=/"{0}/" style=/"width:{4}px;/" οnclick=/"window.location.href='{2}{3}';/">{1}</td>", sClassName, sName[i], sUrl[i],
sParameter, iWidth));
}
sb.Append("</tr></table>");
litMenu.Text = sb.ToString();
}
这里的“Tab2”与“Tab1”只是一个CSS类样式,用于标识选中菜单与未选中菜单样式的区别
.Tab1
{
background-image: url(../Images/Tab1.gif);
font-weight: bold;
color: #064570;
width: 120px;
height: 27px;
text-align: center;
background-repeat: no-repeat;
cursor: hand;
}
.Tab2
{
background-image: url(../Images/Tab2.gif);
font-weight: bold;
color: #064570;
width: 120px;
height: 27px;
text-align: center;
background-repeat: no-repeat;
cursor: hand;
}
最后一步,就是调用了,在其他的web页,调用如下
Menu.LoadMenuCommon(LitMenu, Menu.sName4, Menu.sUrl4, 1, string.Empty);