創建模闆化的ASP.NET 用戶控件
發表時間:2020-10-18
發布人:葵宇科技
浏覽次數:63
可(kě)以創建實現模闆的用戶控件,這是 ASP.NET 的一項功能,它允許将控件數據與其表示形式相分離(lí)。模闆化控件不提供用戶界面。編寫它則是為了實現一個(gè)命名容器(qì)以及包含屬性和(hé)方法可(kě)由宿主頁訪問(wèn)的類。
用戶控件的用戶界面由頁面開發人員在設計時提供。開發人員創建由用戶控件定義的類型模闆,然後可(kě)以向模闆添加控件和(hé)标記。
創建模闆用戶控件在 .ascx 文(wén)件中(zhōng),添加要在其中(zhōng)顯示模闆的 ASP.NET PlaceHolder 控件。
在用戶控件的代碼中(zhōng),實現 ITemplate 類型的屬性。
将實現 INamingContainer 接口的服務器(qì)控件類定義為要在其中(zhōng)創建模闆實例的容器(qì)。此容器(qì)叫做模闆的命名容器(qì)。
注意
此控件實質上成了用戶控件的嵌套類,但這不是必需的。
将 TemplateContainerAttribute 應用于實現 ITemplate 的屬性 (property),并将模闆命名容器(qì)的類型作為參數傳遞給屬性 (attribute) 的構造函數。
在控件的 Init 方法中(zhōng),将以下(xià)步驟重複一次或多次:
創建命名容器(qì)類的一個(gè)實例。
在命名容器(qì)中(zhōng)創建該模闆的一個(gè)實例。
将命名容器(qì)實例添加到 PlaceHolder 服務器(qì)控件的 Controls 屬性。
注意
從使用用戶控件的頁面的角度來看,模闆化用戶控件的語法與自定義模闆化控件的語法相同。
示例
下(xià)面的示例演示一個(gè)模闆化用戶控件和(hé)一個(gè)包含該控件的頁面。該用戶控件創建一個(gè)可(kě)在宿主頁上聲明為 <MessageTemplate> 的模闆。該模闆控件還公開兩個(gè)可(kě)由宿主頁在模闆内訪問(wèn)的屬性:Index 和(hé) Message。
第一個(gè)示例顯示模闆化用戶控件。第二個(gè)示例顯示包含該用戶控件的頁面。
<%@ Control language="C#" ClassName="TemplatedUC" %>
<script runat=server>
private ITemplate messageTemplate = null;
[ TemplateContainer(typeof(MessageContainer)) ]
public ITemplate MessageTemplate {
get
{ www.yzjxsp.com
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()
{ www.yzjjx.com
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>
if ($ != jQuery) { $ = jQuery.noConflict(); } var isLogined = false; var cb_blogId = 56011; var cb_entryId = 1952929; var cb_blogApp = "haosola"; var cb_blogUserGuid = "28d7057a-c53a-de11-9510-001cf0cd104b"; var cb_entryCreatedDate = '2011/2/13 1:09:00';
昆明軟件開發公司中(zhōng)的佼佼者,緻力定制軟件開發,昆明軟件開發請聯系昆明葵宇科技有限公司,電話:15987118523。