динамический выпадающий список исчезает

#c# #asp.net

#c# #asp.net

Вопрос:

Я заполняю динамически добавляемые выпадающие списки из базы данных. Когда я нажимаю кнопку на asp.net форма динамически добавляемых выпадающих списков повторно заполняется. Если я проверю ispostback и заблокирую код создания, ddls не будут отображаться. Каков наилучший способ предотвратить создание ddls для каждого сообщения.

 public partial class search : System.Web.UI.Page
{
    Panel SearchPanel;
    protected void Page_PreInit(object sender, EventArgs e)
    {
        //Create a Dynamic Panel
        SearchPanel = new Panel();
        SearchPanel.ID = "SearchPanel";
        SearchPanel.BorderWidth = 1;
        SearchPanel.Width = 300;
        this.form1.Controls.Add(SearchPanel);

        CreateDropDownList("search1");
        CreateDropDownList("search2");

        Button btnAddDd2 = new Button();
        btnAddDd2.ID = "btnAddDd2";
        btnAddDd2.Text = "Search";
        btnAddDd2.Width = 80;
        btnAddDd2.Click  = new System.EventHandler(search_click);
        this.form1.Controls.Add(btnAddDd2);

    }
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    private void CreateDropDownList(string ID)
    {
        DropDownList ddl = new DropDownList();
        ddl.ID = ID;
        ddl.Items.Add(new ListItem("--Select--", ""));
        ddl.Items.Add(new ListItem("One", "1"));
        ddl.Items.Add(new ListItem("Two", "2"));
        ddl.Items.Add(new ListItem("Three", "3"));
        ddl.AutoPostBack = true;

        SearchPanel.Controls.Add(ddl);

        Literal lt = new Literal();
        lt.Text = "<br />";
        SearchPanel.Controls.Add(lt);

        Thread.Sleep(2000); // simulate wait time of database load
    }

    protected void search_click(object sender, EventArgs e)
    {
        // find something
    }
}
  

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

1. Каждый динамически созданный элемент управления должен быть воссоздан при каждой обратной передаче с тем же идентификатором, что и раньше, и Page_Load не позднее. Вы можете сохранить количество созданных элементов управления в ViewState or Session , это все, что вам нужно, чтобы создать их снова при обратной передаче.

Ответ №1:

Динамически созданные элементы управления теряли свои значения при запуске события post back. Кроме того, если вы проверите IsPostback событие обратной отправки, вы потеряете динамические элементы управления. Чтобы преодолеть эту проблему, вам необходимо использовать ViewState свойство.

Для получения подробного описания и примера перейдите по этой ссылке: сохранение состояния для динамически созданных элементов управления в ASP.NET приложения

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

1. Спасибо за информацию. Перешли по ссылке и использовали код, но элементы управления никогда не создаются. Должно ли значение AutoEventWireup=»true» быть false в разметке?