轉帖|其它|編輯:郝浩|2010-09-01 14:22:15.000|閱讀 616 次
概述:可以創建實現模板的用戶控件,這是 ASP.NET 的一項功能,它允許將控件數據與其表示形式相分離。模板化控件不提供用戶界面。編寫它則是為了實現一個命名容器以及包含屬性和方法可由宿主頁訪問的類。本文主要介紹如何創建模板化的ASP.NET 用戶控件,希望對大家有幫助。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
可以創建實現模板的用戶控件,這是 ASP.NET 的一項功能,它允許將控件數據與其表示形式相分離。模板化控件不提供用戶界面。編寫它則是為了實現一個命名容器以及包含屬性和方法可由宿主頁訪問的類。
用戶控件的用戶界面由頁面開發人員在設計時提供。開發人員創建由用戶控件定義的類型模板,然后可以向模板添加控件和標記。
創建模板用戶控件在 .ascx 文件中,添加要在其中顯示模板的 ASP.NET PlaceHolder 控件。
在用戶控件的代碼中,實現 ITemplate 類型的屬性。
將實現 INamingContainer 接口的服務器控件類定義為要在其中創建模板實例的容器。此容器叫做模板的命名容器。
注意
此控件實質上成了用戶控件的嵌套類,但這不是必需的。
將 TemplateContainerAttribute 應用于實現 ITemplate 的屬性 (property),并將模板命名容器的類型作為參數傳遞給屬性 (attribute) 的構造函數。
在控件的 Init 方法中,將以下步驟重復一次或多次:
創建命名容器類的一個實例。
在命名容器中創建該模板的一個實例。
將命名容器實例添加到 PlaceHolder 服務器控件的 Controls 屬性。
注意
從使用用戶控件的頁面的角度來看,模板化用戶控件的語法與自定義模板化控件的語法相同。
示例
下面的示例演示一個模板化用戶控件和一個包含該控件的頁面。該用戶控件創建一個可在宿主頁上聲明為 <MessageTemplate> 的模板。該模板控件還公開兩個可由宿主頁在模板內訪問的屬性:Index 和 Message。
第一個示例顯示模板化用戶控件。第二個示例顯示包含該用戶控件的頁面。
<%@ 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>
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:網絡轉載