轉(zhuǎn)帖|其它|編輯:郝浩|2010-09-01 14:22:15.000|閱讀 616 次
概述:可以創(chuàng)建實(shí)現(xiàn)模板的用戶控件,這是 ASP.NET 的一項(xiàng)功能,它允許將控件數(shù)據(jù)與其表示形式相分離。模板化控件不提供用戶界面。編寫(xiě)它則是為了實(shí)現(xiàn)一個(gè)命名容器以及包含屬性和方法可由宿主頁(yè)訪問(wèn)的類。本文主要介紹如何創(chuàng)建模板化的ASP.NET 用戶控件,希望對(duì)大家有幫助。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門(mén)軟控件火熱銷(xiāo)售中 >>
可以創(chuàng)建實(shí)現(xiàn)模板的用戶控件,這是 ASP.NET 的一項(xiàng)功能,它允許將控件數(shù)據(jù)與其表示形式相分離。模板化控件不提供用戶界面。編寫(xiě)它則是為了實(shí)現(xiàn)一個(gè)命名容器以及包含屬性和方法可由宿主頁(yè)訪問(wèn)的類。
用戶控件的用戶界面由頁(yè)面開(kāi)發(fā)人員在設(shè)計(jì)時(shí)提供。開(kāi)發(fā)人員創(chuàng)建由用戶控件定義的類型模板,然后可以向模板添加控件和標(biāo)記。
創(chuàng)建模板用戶控件在 .ascx 文件中,添加要在其中顯示模板的 ASP.NET PlaceHolder 控件。
在用戶控件的代碼中,實(shí)現(xiàn) ITemplate 類型的屬性。
將實(shí)現(xiàn) INamingContainer 接口的服務(wù)器控件類定義為要在其中創(chuàng)建模板實(shí)例的容器。此容器叫做模板的命名容器。
注意
此控件實(shí)質(zhì)上成了用戶控件的嵌套類,但這不是必需的。
將 TemplateContainerAttribute 應(yīng)用于實(shí)現(xiàn) ITemplate 的屬性 (property),并將模板命名容器的類型作為參數(shù)傳遞給屬性 (attribute) 的構(gòu)造函數(shù)。
在控件的 Init 方法中,將以下步驟重復(fù)一次或多次:
創(chuàng)建命名容器類的一個(gè)實(shí)例。
在命名容器中創(chuàng)建該模板的一個(gè)實(shí)例。
將命名容器實(shí)例添加到 PlaceHolder 服務(wù)器控件的 Controls 屬性。
注意
從使用用戶控件的頁(yè)面的角度來(lái)看,模板化用戶控件的語(yǔ)法與自定義模板化控件的語(yǔ)法相同。
示例
下面的示例演示一個(gè)模板化用戶控件和一個(gè)包含該控件的頁(yè)面。該用戶控件創(chuàng)建一個(gè)可在宿主頁(yè)上聲明為 <MessageTemplate> 的模板。該模板控件還公開(kāi)兩個(gè)可由宿主頁(yè)在模板內(nèi)訪問(wèn)的屬性:Index 和 Message。
第一個(gè)示例顯示模板化用戶控件。第二個(gè)示例顯示包含該用戶控件的頁(yè)面。
<%@ Control language="C#" ClassName="TemplatedUC" %>
<script runat=server>
private ITemplate messageTemplate = null;
[ TemplateContainer(typeof(MessageContainer)) ]
public ITemplate MessageTemplate {
get
{
return messageTemplate;
}
set
{
messageTemplate = value;
}
}
void Page_Init() {
if (messageTemplate != null) {
String[] fruits = {"apple", "orange", "banana", "pineapple" };
for (int i=0; i<4; i++)
{
MessageContainer container = new MessageContainer(i, fruits[i]);
messageTemplate.InstantiateIn(container);
PlaceHolder1.Controls.Add(container);
}
}
}
public class MessageContainer: Control, INamingContainer {
private int m_index;
private String m_message;
internal MessageContainer(int index, String message)
{
m_index = index;
m_message = message;
}
public int Index {
get
{
return m_index;
}
}
public String Message
{
get
{
return m_message;
}
}
}
</script>
<asp:placeholder runat=server id="PlaceHolder1" />
<%@ Page Language="C#" %>
<%@ Register TagPrefix="uc" tagname="TemplateTest"
Src="TemplatedUC.ascx" %>
<html>
<script runat=server>
protected void Page_Load()
{
DataBind();
}
</script>
<head>
<title>Templated User Control Test</title>
</head>
<body>
<h1>Testing Templated User Control</h1>
<form id="Form1" runat=server>
<uc:TemplateTest runat=server>
<MessageTemplate>
Index: <asp:Label runat="server" ID="Label1"
Text='<%# Container.Index %>' />
<br />
Message: <asp:Label runat="server" ID="Label2"
Text='<%# Container.Message %>' />
<hr />
</MessageTemplate>
</uc:TemplateTest>
</form>
</body>
</html>
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:網(wǎng)絡(luò)轉(zhuǎn)載