Поделиться через


Практическое руководство. Программное создание экземпляров пользовательских элементов управления ASP.NET

Обновлен: Ноябрь 2007

Так же, как любой серверный элемент управления на веб-странице ASP.NET, можно программно создавать пользовательский элемент управления.

Программное создание экземпляра пользовательского элемента управления

  1. В пользовательском элементе управления проверьте, что директива @ Control содержит атрибут ClassName, который назначает класс пользовательскому элементу управления.

    В следующем примере задается атрибут ClassName для строгой типизации пользовательского элемента управления.

    <%@ Control className="MyUserControl" %>
    
  2. На странице, на которой нужно работать с пользовательским элементом управления, создайте ссылку на него с помощью директивы @ Reference.

    При программном создании пользовательского элемента управления его строгая типизация доступна для веб-страницы ASP.NET только после создания ссылки на него. Например, следующий код создает ссылку на пользовательский элемент управления, сохраненный в файле MyUserControl.ascx.

    <%@ Reference Control="MyUserControl.ascx" %>
    
    c0az2h86.alert_note(ru-ru,VS.90).gifПримечание.

    Используйте @ Reference, когда планируете программно загрузить элемент управления. Используйте директиву @ Register, когда добавляете пользовательский элемент управления на страницу декларативно. Подробные сведения см. в разделе Практическое руководство. Включение пользовательского элемента управления в веб-страницу ASP.NET.

  3. Создайте экземпляр переменной для пользовательского элемента управления с помощью имени класса элемента управления. Класс будет частью пространства имен ASP.

    Например, если нужно создать экземпляр пользовательского элемента управления, объявленного как класс Spinner, используйте следующий синтаксис:

    Protected Spinner1 As ASP.Spinner
    
    Protected ASP.Spinner Spinner1;
    
  4. Создайте экземпляр пользовательского элемента управления в коде с помощью вызова метода LoadControl.

  5. Назначьте требуемые значения свойств и затем добавьте элемент управления к коллекции ControlCollection контейнера на странице, например, элемент управления PlaceHolder.

    c0az2h86.alert_note(ru-ru,VS.90).gifПримечание.

    При добавлении элементов управления к объекту ControlCollection с помощью метода Add они помещаются в коллекцию в порядке их обработки. Если нужно добавить элемент управления в отдельную позицию в коллекции, используйте метод AddAt и укажите местоположение индекса, где нужно сохранить элемент управления.

Пример

В следующем примере показана веб-страница ASP.NET загружающая программным способом пользовательский элемент управления. Страница включает директиву @ Reference, чтобы указать файл элемента управления. Метод LoadControl считывает файл и создает его экземпляр в качестве элемента управления, который можно добавить на страницу.

<%@ Page Language="VB" %>
<%@ Reference Control="~\Controls\Spinner.ascx" %>

<script runat="server">
Private Spinner1 As ASP.Spinner
Protected Sub Page_Load(ByVal sender As Object, _
        ByVal e As System.EventArgs)
    Spinner1 = CType(LoadControl("~\Controls\Spinner.ascx"), _
        ASP.Spinner)
    ' Set MaxValue first.
    Spinner1.MaxValue = 20
    Spinner1.MinValue = 10
    PlaceHolder1.Controls.Add(Spinner1)
End Sub

Protected Sub Button1_Click(ByVal sender As Object, _
      ByVal e As System.EventArgs)
    Label1.Text = Spinner1.CurrentNumber.ToString()
End Sub
</script>
<html>
<head id="Head1" runat="server">
  <title>Load User Control Programmatically</title>
</head>
<body>
  <form id="form1" runat="server">
    <div>
      <asp:PlaceHolder runat=server ID="PlaceHolder1" />
      <br />
      <asp:Button ID="Button1" runat="server" 
        Text="Button" 
        OnClick="Button1_Click" />
      <br />
      <br />
      <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
    </div>
  </form>
</body>
</html>
<%@ Page Language="C#" %>
<%@ Reference Control="~/Controls/Spinner.ascx" %>
<script runat="server">
private ASP.Spinner Spinner1;
protected void Page_Load(object sender, EventArgs e)
{
    Spinner1 = (ASP.Spinner)LoadControl("~/Controls/Spinner.ascx");
     // Set MaxValue first.
    Spinner1.MaxValue = 20;
    Spinner1.MinValue = 10;
    PlaceHolder1.Controls.Add(Spinner1);
}

protected void Button1_Click(object sender, EventArgs e)
{
    Label1.Text = Spinner1.CurrentNumber.ToString();
}
</script>

<html>
<head id="Head1" runat="server">
  <title>Load User Control Programmatically</title>
</head>
<body>
  <form id="form1" runat="server">
    <div>
      <asp:PlaceHolder runat=server ID="PlaceHolder1" />
      <br />
      <asp:Button ID="Button1" runat="server" 
        Text="Button" 
        OnClick="Button1_Click" />
      <br />
      <br />
      <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
    </div>
  </form>
</body>
</html>

См. также

Основные понятия

Общие сведения о пользовательских элементах управления ASP.NET