Вопрос

У меня есть UpdatePanel и обычная панель. В Panel я динамически добавляю простые UserControls. Пользовательский контроль имеет кнопку и метку. Когда я нажимаю кнопку в элементе управления, она удаляет все элементы управления в панели, которые я добавила динамически. Кто-нибудь может помочь?

    int controlID = 0;
    List<Control> cc = new List<Control>();
    if (Session["ControlsCompleted"] != null)
    {
        cc = Session["ControlsCompleted"] as List<Control>;
        for (int i = 0; i < cc.Count; i++)
        {
            pnlCompletedEducation.Controls.Add(cc[i]);
        }
        controlID = cc.Count;
    }
    Controls_TestWebUserControl ct = LoadControl(@"Controls\TestWebUserControl.ascx") as Controls_TestWebUserControl;
    ct.ID = controlID.ToString();
    cc.Add(ct);
    ct.EnableViewState = true;
    pnlCompletedEducation.Controls.Add(ct);
    txtInstitutionName.Text = controlID.ToString();
    List<Control> lc = new List<Control>();
    for (int i = 0; i < pnlCompletedEducation.Controls.Count; i++)
    {
        lc.Add(pnlCompletedEducation.Controls[i]);
    }
    Session["ControlsCompleted"] = lc;

Так я добавляю элементы управления на панель. Мне пришлось где-то их хранить, и я не мог сделать это с помощью ViewState, поэтому я использовал сессию, что является плохой идеей.

Это было полезно?

Решение

Вы говорите, что добавляете пользовательский элемент управления динамически. У вас есть такой код:

void Page_Load(...)    
{
     if (!IsPostback)
        // AddUserControl here.
}

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

Другие советы

Проблема в том, что вы не воссоздали (например, в Page_Load) динамически добавленный элемент управления. Убедитесь, что элемент управления воссоздан на IsPostBack

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top