Динамическое добавление DropDownList

Я пытаюсь динамически добавить раскрывающийся список. Ошибок нет, за исключением того, что я не вижу раскрывающегося списка. Вот код:

protected void Page_Load(object sender, EventArgs e)
{
    if(Ispostback)
    {
        DropDownList ddlPercent = new DropDownList();
        ddlPercent .ID = "ddlDiscountPercent";
        ddlPercent .AutoPostBack = true;
        Panel1.Controls.Add(ddlPercent );
        ddlPercent .ID = "ddlPercent " + 1;
        ddlPercent .Items.Add(new ListItem("5", "5%"));
        ddlPercent .Items.Add(new ListItem("10", "10%"));
        ddlPercent .Items.Add(new ListItem("15", "15%"));
        ddlPercent .Items.Add(new ListItem("20", "20%"));
        ddlPercent .Items.Add(new ListItem("30", "30%"));
        ddlPercent .Items.Add(new ListItem("50", "50%"));

        ddlPercent.SelectedIndexChanged += 
                  new EventHandler(ddlPercent_SelectedIndexChanged);

        ContentPlaceHolder cph = 
                  (ContentPlaceHolder)this.Master.FindControl("MainContent");
        cph.Controls.Add(ddlPercent );
        // ddlPercent.SelectedIndex =(Int32) ViewState["ddl_index"];
    }
}

protected void ddlPercent_SelectedIndexChanged(object sender, EventArgs e)
{
     DropDownList ComboBox=(DropDownList)sender;
     ViewState["ddl_index"] = ComboBox.SelectedValue;        
}

person user575219    schedule 01.02.2012    source источник
comment
Я понимаю, что это плохой вопрос, но -3 без единого примечания к OP с просьбой исправить свой вопрос (с подробным описанием того, что вы хотели бы исправить) ... это немного смешно.   -  person M.Babcock    schedule 01.02.2012
comment


Ответы (3)


Проблема может заключаться в том, что вы не добавляете элемент управления на страницу достаточно рано. Элементы управления необходимо добавлять на ранних этапах жизненного цикла страницы, чтобы связать их события.

Вы делаете это на мероприятии Load, но уже слишком поздно. Попробуйте добавить его во время события Init или переопределить метод CreateChildControls.

А также убедитесь, что вы делаете это на КАЖДОМ запросе страницы, включая обратные передачи.

Надеюсь, что это работает для вас.

person Amar Palsapure    schedule 01.02.2012

Похоже, что из-за условия IsPostBack этот код будет запускаться только в том случае, если страница репостится или будет запущено событие.

person rofans91    schedule 01.02.2012

  1. переместите этот код в OnInit (Page_Init)
  2. убрать if(Ispostback) проверку при добавлении элементов управления в дерево элементов управления. Практически никогда вам не нужно учитывать состояние обратной передачи при динамическом добавлении элементов управления.
person Community    schedule 01.02.2012