как ссылаться на тип класса в вызове LoadControl?

#c# #asp.net #loadcontrol

#c# #asp.net #loadcontrol

Вопрос:

В этом примере для динамической загрузки пользовательского элемента управления как мне объявить «TimeDisplay»? Можно ли это сделать в коде, или это делается на странице ascx? Это пример из книги, я думаю, есть предположения относительно того, где файлы кода расположены относительно друг друга?

 protected void Page_Load(object sender, EventArgs e) 
{ TimeDisplay ctrl = (TimeDisplay)Page.LoadControl("TimeDisplay.ascx"); 
PlaceHolder1.Controls.Add(ctrl); 
}
  

Ответ №1:

Вам нужно добавить ссылку на элемент управления на вашей странице aspx:

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

Комментарии:

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

Ответ №2:

Чтобы объявить элемент управления в разметке, вам нужно зарегистрировать элемент управления в директиве page или в web.config . Регистрация элементов управления в web.config обычно предпочтительнее, потому что вы можете использовать элемент управления в любом месте приложения.

Метод конфигурации:

 <pages>
    <controls>
        <add tagPrefix="uc1" src="~/controls/myusercontrol.ascx" tagName="myusercontrol" />
    </controls>
</pages>            
  

Метод директивы страницы:

 <%@ Register TagPrefix="uc1" TagName="MyUserControl" Src="~/controls/myusercontrol.ascx" %>
  

Комментарии:

1. Он хочет создать элемент управления «динамически», зачем вам нужно объявлять тег в разметке.