Как создать и использовать пользовательский элемент управления с помощью UpdatePanel, добавленной на страницу программным способом - PullRequest
1 голос
/ 23 ноября 2011

У меня есть простой пользовательский веб-элемент управления (код, который я нашел где-то в Интернете):

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs"
Inherits="ARP.DynamicsCRM2011.MagicWebForm.WebUserControl1" %>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
    <asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="True" OnCheckedChanged="CheckBox1_CheckedChanged"
        Text="Checkbox" />
    <asp:Button ID="Button1" runat="server" Text="Button" Visible="False" OnClick="Button1_Click" />
    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>

protected void Page_Load(object sender, EventArgs e)
{

}

protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
{
    Button1.Visible = CheckBox1.Checked;
}

protected void Button1_Click(object sender, EventArgs e)
{
    Label1.Text = DateTime.Now.ToString();
}

Теперь я хочу добавить этот элемент управления на свою страницу (программно в событии OnLoadComplete):

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

WebUserControl1 myControl = (WebUserControl1)Page.LoadControl("~/WebUserControl1.ascx");
myControl.ID = "myControl_" + some_name;
parentControl.Controls.Add(myControl);

Конечно, у меня есть SriptManager на странице, и мой элемент управления добавлен правильно.Я знаю, что программно добавленные элементы управления должны создаваться каждый раз при загрузке страницы.К сожалению, это вызывает создание нового элемента управления, поэтому проверка флажка не работает - после проверки снова запускается OnLoadComplete (страницы) и создается новый элемент управления.Если я опущу это, то ничего не отображается.Так что вопрос - как это сделать?

Ответы [ 2 ]

1 голос
/ 23 ноября 2011

Динамическое управление следует повторно добавить в дерево управления OnPreInit, см. Документацию:

PreInit - создание или повторное создание динамических элементов управления.

Обзор жизненного цикла страницы ASP.NET

0 голосов
/ 23 ноября 2011

Вы можете добавить этот элемент управления по нажатию кнопки и сохранить количество добавленных элементов управления в некотором хранилище, например Session. В Page_Init необходимо проверить это значение счетчика и воссоздать каждый элемент управления, который вы добавили ранее.

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