1、Literal的一般用法,与Label对比
MSDN上的解释:
使用 System.Web.UI.WebControls.Literal 控件在网页上保留显示文本的位置。Literal 控件与 Label 控件类似,但 Literal 控件不允许对所显示的文本应用样式。
可以通过设置 Text 属性,以编程方式控制在控件中显示的文本。
Literal Web 服务器控件介绍
HTML 元素添加到文本上。
容,创建上述简单垂直列表。如果使用 Label 控件,则该控件被包装在 HTML <span> 标记中。<span> 不以任何显而易见的方式影响该页的呈现。如果使用
Literal 控件,将不添加 <span> 标记,这使您的代码更为简单。
您无法使用客户端代码确定控件的位置。
<body>
<form runat="server">
<H1><asp:Literal id="Headline" runat=server /></H1>
</form>
</body>
将代码添加到页面上以在运行时设置控件的 Text 属性。
// 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
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);