2014-01-04 3 views
0

- первичная информация:
В моем последнем проекте, мне нужно иметь страницу с DropDownList с некоторыми пунктами как «ПгвЬЫате», «LastName», " Age "и т. Д. Я хочу добавить дополнительные элементы управления на страницу, когда каждый элемент выбирается пользователем. Например, если пользователь выбрать «Возраст» другой DropDownList создан динамически с этими значениями: «Меньше чем 10»
«Между 10 и 30»
«более 30»
Вот кнопка, добавить этот выбор пользователя в ListBox и позволить пользователю выбирать другие варианты. (Я сделал запрос, наконец, в соответствии с выбором пользователя и отправить его в БД)
- Что я делаю:
создать DROPDOWNLIST и установить его AutoPostBack свойство верно и добавляют некоторые элементы в нем и пользователь должен выбрать один из этих элементов. затем добавить пользователь SelectedValue из DropDownList в переменном кэше, прежде чем страница запись обратно происходит:Добавить динамические элементы управления ASP.NET с помощью DropDownList на странице

protected void DropDownListColumnNameSelectedIndexChanged(object sender, EventArgs e) 
    { 
     Cache["SelectedKey"] = dropDownListColumnName.SelectedValue; 
    } 

Когда пользователь выбирает элемент из DropDownList * DropDownList_SelectedIndexChanged * огнь, и я должен создать элементы управления динамически в держателе места:

var textBoxName = new TextBox 
    { 
     ID = "textBoxName", 
     CssClass = "str-search-textbox-highlight", 
     ViewStateMode = ViewStateMode.Disabled 
    }; 
placeHolderFirstItem.Controls.Add(textBoxName); 

- В чем проблема? При попытке добавить новый элемент управления в текущем событии Button_Click, успешно добавлен на страницу управления, но я не могу найти его placeHolderFirstItem.Controls.Find («textBoxName») фактически placeHolderFirstItem.Controls.Count всегда равна нулю. Поэтому я не могу получить значения textBoxName.Text.
Я стараюсь Google, что для любого решения, и я нашел решение, которое я должен добавить элементы управления в Page.OnInit поэтому я добавить элементы управления в перегруженной OnInit (е):

protected override void OnInit(EventArgs e) 
     { 
      if (!Page.IsPostBack) return; 
      var textBoxName = new TextBox 
       { 
        ID = "textBoxName", 
        CssClass = "str-search-textbox-highlight", 
        ViewStateMode = ViewStateMode.Disabled 
       }; 
      placeHolderFirstItem.Controls.Add(textBoxName); 
     } 

после выполнения этого я могу найти «textBoxName "in placeHolderFirstItem, но он срабатывает до DropDownList_SelectedIndexChanged!
так как я могу добавить новые элементы управления для размещения держателя точно, когда пользователь меняет значение dropDownList и как я могу узнать новое значение управления?
Заранее спасибо,
Mohsen.

- Обновлено:
Вот лучшее решение
(http://forums.asp.net/p/1959726/5596531.aspx?p=True&t=635244790943067485&pagenum=1)

ответ

0

Когда вы динамически добавлять элементы управления, вы должны перезагрузить элементы управления в дереве управления каждый раз после этого для того, чтобы появиться , С помощью ViewState, вы можете изменить свой образец кода, чтобы иметь:

ViewState("ShowTextbox") = true 

И тогда в вашей обычной инициализации:

protected override void OnInit(EventArgs e) 
    { 
     if (!Page.IsPostBack) return; 

     if (ViewState("ShowTextBox") == true) { 
      var textBoxName = new TextBox 
      { 
       ID = "textBoxName", 
       CssClass = "str-search-textbox-highlight", 
       ViewStateMode = ViewStateMode.Disabled 
      }; 
      placeHolderFirstItem.Controls.Add(textBoxName); 
     } 
    } 

Пожалуйста, обратите внимание, что это намного проще, чтобы иметь контроль над деревом управления, а затем показать/скрыть, установив Visible в true/false из-за этих проблем дерева управления ASP.NET.

+0

Спасибо за ваш ответ, но предположим, что у нас около 10 - 15 элементов в dropDownList, которые должны загружать свои данные в новый dropDownList, я не думаю, что это было правильное решение для скрытия и отображения 10 - 15 элементов управления для каждый пост. Я думаю, что это не идеальное решение. – Mohsen

+0

Мое кодированное решение не использует механизм show/hide ... и вы используете веб-формы, поэтому не так много вариантов, если вы не хотите делать все на стороне клиента, что еще более проблематично, если вы отправляете назад. –

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