ITemplate 接口
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
定义用子控件填充模板化 ASP.NET 服务器控件的行为。 子控件表示页上定义的内联模板。
public interface class ITemplate
public interface ITemplate
type ITemplate = interface
Public Interface ITemplate
- 派生
示例
下面的代码示例演示了一个简单的模板化服务器控件,该控件使用 ITemplate 接口创建模板化属性。
using System;
using System.Web;
using System.Web.UI;
namespace TemplateControlSamples {
public class TemplateItem : Control, INamingContainer {
private String _message = null;
public TemplateItem(String message) {
_message = message;
}
public String Message {
get {
return _message;
}
set {
_message = value;
}
}
}
[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name="FullTrust")]
[ParseChildren(true)]
public class Template1 : Control, INamingContainer {
private ITemplate _messageTemplate = null;
private String _message = null;
public String Message {
get {
return _message;
}
set {
_message = value;
}
}
[
PersistenceMode(PersistenceMode.InnerProperty),
TemplateContainer(typeof(TemplateItem))
]
public ITemplate MessageTemplate {
get {
return _messageTemplate;
}
set {
_messageTemplate = value;
}
}
protected override void CreateChildControls() {
// If a template has been specified, use it to create children.
// Otherwise, create a single LiteralControl with the message value.
if (MessageTemplate != null) {
Controls.Clear();
TemplateItem i = new TemplateItem(this.Message);
MessageTemplate.InstantiateIn(i);
Controls.Add(i);
}
else {
this.Controls.Add(new LiteralControl(this.Message));
}
}
}
}
Imports System.Web
Imports System.Web.UI
Namespace TemplateControlSamplesVB
Public Class TemplateItem
Inherits Control
Implements INamingContainer
Private _message As String = Nothing
Public Sub New(Message As String)
_message = message
End Sub
Public Property Message As String
Get
Return _message
End Get
Set
_message = Value
End Set
End Property
End Class
<System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust"), _
ParseChildren(true)> _
Public Class Template1VB
Inherits Control
Implements INamingContainer
Private _messageTemplate As ITemplate = Nothing
Private _message As String = Nothing
Public Property Message As String
Get
Return _message
End Get
Set
_message = Value
End Set
End Property
<TemplateContainer(GetType(TemplateItem))> _
Public Property MessageTemplate As ITemplate
Get
Return _messageTemplate
End Get
Set
_messageTemplate = Value
End Set
End Property
Protected Overrides Sub CreateChildControls()
' If a template has been specified, use it to create children.
' Otherwise, create a single LiteralControl with the message value.
If Not (MessageTemplate Is Nothing)
Controls.Clear()
Dim I As New TemplateItem(Me.Message)
MessageTemplate.InstantiateIn(I)
Controls.Add(I)
Else
Me.Controls.Add(New LiteralControl(Me.Message))
End If
End Sub
End Class
End Namespace
注解
此接口由自定义服务器控件使用,但从未由它们实现。 ASP.NET 始终实现它。
方法
InstantiateIn(Control) |
当由类实现时,定义子控件和模板所属的 Control 对象。 然后在内联模板中定义这些子控件。 |