建立模板化的ASP.NET 使用者控制元件

iDotNetSpace發表於2010-09-01
可以建立實現模板的使用者控制元件,這是 ASP.NET 的一項功能,它允許將控制元件資料與其表示形式相分離。模板化控制元件不提供使用者介面。編寫它則是為了實現一個命名容器以及包含屬性和方法可由宿主頁訪問的類。

  使用者控制元件的使用者介面由頁面開發人員在設計時提供。開發人員建立由使用者控制元件定義的型別模板,然後可以向模板新增控制元件和標記。

  建立模板使用者控制元件在 .ascx 檔案中,新增要在其中顯示模板的 ASP.NET PlaceHolder 控制元件。

  在使用者控制元件的程式碼中,實現 ITemplate 型別的屬性。

  將實現 INamingContainer 介面的伺服器控制元件類定義為要在其中建立模板例項的容器。此容器叫做模板的命名容器。

  注意

  此控制元件實質上成了使用者控制元件的巢狀類,但這不是必需的。

  將 TemplateContainerAttribute 應用於實現 ITemplate 的屬性 (property),並將模板命名容器的型別作為引數傳遞給屬性 (attribute) 的建構函式。

  在控制元件的 Init 方法中,將以下步驟重複一次或多次:

  建立命名容器類的一個例項www.qichepeijian.com

  在命名容器中建立該模板的一個例項。

  將命名容器例項新增到 PlaceHolder 伺服器控制元件的 Controls 屬性。

  注意

  從使用使用者控制元件的頁面的角度來看,模板化使用者控制元件的語法與自定義模板化控制元件的語法相同。

  示例

  下面的示例演示一個模板化使用者控制元件和一個包含該控制元件的頁面。該使用者控制元件建立一個可在宿主頁上宣告為 的模板。該模板控制元件還公開兩個可由宿主頁在模板內訪問的屬性:Index 和 Message。

  第一個示例顯示模板化使用者控制元件。第二個示例顯示包含該使用者控制元件的頁面。

  C#" ClassName="TemplatedUC" %>

  

  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;

  }

  }

  }

  

  

  C#" %>

  

  Src="TemplatedUC.ascx" %>

  

  

  protected void Page_Load()

  {

  DataBind();

  }

  

  

  

Templated User Control Test

  

  

  

Testing Templated User Control

  

  

  

  Index:

  Text='' />

  

  Message:

  Text='' />

  


  

  

  

  

  

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-672324/,如需轉載,請註明出處,否則將追究法律責任。

相關文章