Я успешно загружал элементы управления динамически в Page_Load раньше.Единственное, что я обнаружил, я должен был быть осторожным, чтобы убедиться, что, если я выполняю обратную передачу, те же элементы управления были загружены в последующую page_load, чтобы гарантировать, что состояние просмотра не было повреждено ... все события и т. Д. Работали как ожидалось.В моем случае поток управления закончился примерно так:
page_load - загрузить управление a
(сделать что-то, что вызовет обратную передачу и событие x)
page_load - makeуверен, что вы загружаете элемент управления a
event_x - очищаете элемент управления a, загружаете элемент управления b
(делаете что-то, что вызывает обратную передачу)
page_load - убедитесь, что вы загружаете элемент управления ...
это означало загрузку элементов управления, которые вы полностью намеревались удалить, но я смог найти единственный способ не испортить состояние просмотра ...
Если у вас есть страница с PlaceHolder1 и Label1, тоследующий код приводит к тому, что событие нажатия кнопки срабатывает очень хорошо:
protected void Page_Load(object sender, EventArgs e)
{
var dynamicButton = new Button() { Text = "Click me" };
dynamicButton.Click +=new EventHandler(dynamicButton_Click);
PlaceHolder1.Controls.Add(dynamicButton);
}
void dynamicButton_Click(object sender, EventArgs e)
{
Label1.Text = "Clicked button";
}
ведет себя так же с пользовательским элементом управления:
WebUserControl ascx:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs" Inherits="WebUserControl" %>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<asp:Button ID="Button1" runat="server" Text="Click Me" onclick="Button1_Click" />
код WebUserControlпозади:
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = "Clicked Button";
}
родительский элемент управления, который загружает дочерний элемент управления:
protected void Page_Load(object sender, EventArgs e)
{
var dynamicControl = Page.LoadControl("~/WebUserControl.ascx");
PlaceHolder1.Controls.Add(dynamicControl);
}