技术开发 频道

模板化的ASP.NET用户控件创建方法

  示例

  下面的示例演示一个模板化用户控件和一个包含该控件的页面。该用户控件创建一个可在宿主页上声明为 的模板。该模板控件还公开两个可由宿主页在模板内访问的属性: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>
0
相关文章