Создайте экземпляр usercontrol программно в ASP.NET - PullRequest
2 голосов
/ 16 февраля 2011

У меня есть UserControl, который мне нужно добавить динамически. Я пытался следовать этой статье MSDN, но я не добился успеха .... http://msdn.microsoft.com/en-us/library/c0az2h86.aspx

UserControl - это, по сути, галерея изображений, которая загружает некоторые изображения на основе идентификатора. Моя идея состояла в том, чтобы сделать этот идентификатор доступным как собственность. Затем, когда я создаю экземпляр элемента управления, я могу установить этот идентификатор и добавить его в форму.

Я добавил ссылку на элемент управления на странице .aspx, которая будет его использовать, например:

<%@ Reference Control="~/PictureGallery.ascx" %>

И в UserControl я добавил ClassName, как это:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="PictureGallery.ascx.cs"
Inherits="PictureGallery" ClassName="PictureGallery" %>

Когда я пытаюсь создать экземпляр в .aspx.cs, как предлагает статья, Dim gallery As ASP.PictureGallery, я получаю «Тип ASP.PictureGallery не определен».

В статье упоминается пространство имен ASP, и я безуспешно пытался импортировать его в .aspx.cs. Поэтому я не могу получить ссылку на UserControl.

Как это можно исправить?

Ответы [ 3 ]

6 голосов
/ 16 февраля 2011

Похоже, вы путаете два отдельных способа работы с UserControl.

Один из способов - зарегистрировать элемент управления на своей странице, чтобы вы могли разместить его на странице во время разработки, например,

<div>
    <asp:PictureGallery id="myGallery" runat="server" MyProperty="SomeValue">  
    </asp:PictureGallery>
</div>

Второй программно (или динамически) добавляет его на страницу во время выполнения вашего кода. Если это так, то вам нужно использовать функцию LoadControl, которая упоминается в примере. Вам не нужно регистрировать элемент управления в файле aspx, если вы делаете это. например,

Dim gallery as PictureGallery = LoadControl("~/PathToControl/gallery.ascx")
gallery.MyProperty = "SomeValue"
placeHolder.controls.add(gallery)

1010 * редактировать *
Какое имя класса элемента управления в коде позади ... примерно так:

Partial Public Class MyControlsClassName
    Inherits System.Web.UI.UserControl

Это тип, который вам нужно использовать при объявлении. Это возможно в пространстве имен?

0 голосов
/ 16 февраля 2011

Пространство имен ASP генерируется во время выполнения - пользовательские элементы управления «компилируются», поскольку они используются страницами .aspx, поэтому вы получаете сообщение об ошибке «Тип ASP.PictureGallery не определен».

При динамическом добавлении пользовательских элементов управления следует использовать метод P age.LoadControl :

Page.LoadControl("~/PictureGallery.ascx")
0 голосов
/ 16 февраля 2011

Я не думаю, что вы поместили элемент управления в свой код позади.Возможно, вы уже создали ссылку, но есть ли у вас такой тег как <asp:PictureGalary id="gallary"></asp:PictureGalary> в вашем aspx?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...