2013-10-28 5 views
0

Когда я нажимаю btnGDynamicCont, я хочу загрузить первый набор элементов управления, затем при каждом последующем нажатии этой кнопки добавьте новый элемент управления (текстовое поле) вместе с другими, поэтому каждый раз, когда он нажимается, я добавляю новое текстовое поле через государство.Как добавить новый динамический элемент управления при нажатии кнопки?

Знаете ли вы, где я должен добавить создание нового текстового поля, чтобы сохранить его после каждой обратной передачи?

{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (Convert.ToString(ViewState["Generated"]) == "true") 
      GenerateDynamicControls(); 

    } 

    public void GenerateDynamicControls() 
    { 
     TextBox txtDynamic = new TextBox(); 
     txtDynamic.ID = "txtDynamic"; 
     txtDynamic.Text = "Dynamic TextBox"; 
     Page.Form.Controls.Add(txtDynamic); 

     TextBox txtDynamic2 = new TextBox(); 
     txtDynamic2.ID = "txtDynamic2"; 
     txtDynamic2.Text = "Dynamic Textbox"; 
     Page.Form.Controls.Add(txtDynamic2); 

    } 

    protected void btnGDynamicCont_Click1(object sender, EventArgs e) 
    { 
     if (Convert.ToString(ViewState["Generated"]) != "true") 
     { 
      GenerateDynamicControls(); 
      ViewState["Generated"] = "true"; 
     } 
     else 
     { 
      Response.Write("<h2>Controls are already exist in page</h2>"); 

     } 
    } 
} 

}

ответ

0

Динамические элементы управления, как правило, воссозданный в методе Page_Load. Для получения дополнительной информации см. Статью Dynamically Created Controls in ASP.NET.

+0

То, что я сейчас добавляю, находится в page_load, проблема в том, что если я не хочу добавлять элементы управления, которые предварительно определены и вместо этого добавляют каждый новый экземпляр каждый раз, когда я нажимаю (что я делаю), тогда он создает первый и никогда не создает второй элемент управления. Я пробовал его без идентификатора и т. Д. В надежде, что он будет продолжать создавать элементы управления на странице, но это не так. – connersz

+0

Я не уверен, что я так понимаю ваш комментарий :(Во всяком случае, если вы хотите, чтобы на странице появились ранее созданные элементы управления, вы должны воссоздать их при каждом запросе на сервер. – platon

0

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

unable to add more than one server control dynamically in asp.net

Everytime обратная передача происходит, вы должны обновить уже существующие элементы управления (динамически добавлены) в вашем случае page_load и новые элементы управления должны быть созданы в случае button_click.

Используйте некоторую логику для создания идентификаторов для элементов управления для состояния просмотра. VIEWSTATE будет автоматически исправляться, если идентификаторы элементов управления, созданных до и после обратной передачи, одинаковы.

Одним из способов отслеживания количества текстовых полей является сохранение счета в сеансе.

+0

Теперь я немного подошел с кодом ниже , У меня все еще есть пара проблем, которые я не могу решить. 1) добавлено первое время по 2 ящика. 2) (это странно), текстовые поля сохраняются не только во время обратной передачи, но также после обновления страницы, отключения браузера, отладки остановились, разные браузеры и т. д., как это происходит? – connersz

+0

Извините, я не позволю добавить код. – connersz

+0

Да, в приведенном примере 2 строки добавляются по умолчанию .. вы можете удалить их, если потребуется. это были статические строки в aspx – Saranya

Смежные вопросы