2014-10-14 5 views
1

У меня возник вопрос о том, как поймать мои значения из dropdownlists и текстовых полей и сохранить их в моей базе данных.Получение значения из динамически добавленных элементов управления из ascx.file

Я использую ASPP ASP-страницы, а не MVC.

У меня есть один файл ascx с моими элементами управления. Я динамически создаю их в своем коде. У меня нет проблем с postback, я использую ViewState в качестве счетчика из своих элементов управления. Каждому элементу управления присваивается идентификатор «ratingcontrols» + счетчик viewState. так что, например, у меня есть 6 dropdownlists и 4 текстовых поля, счетчик идет от 0 до 8. Первый dropdownlist имеет идентификатор «ratingcontrols0», второй «ratingcontrols1» и так далее. Мои первые 3 dropdownlists являются фактическими разделенными день, месяц и год, он представляет мой календарь. Следующие 3 dropdownlists - мой второй календарь.

Когда я нажимаю кнопку для добавления элементов управления, эти 10 элементов управления создаются как группа из моего файла ascx. Когда я нажимаю второй раз на кнопке, у меня есть еще одна группа из 10 элементов управления, теперь мой счетчик идет от 9 до 17 для моих идентификаторов.

Мой вопрос в том, как получить эти значения и добавить каждую группу в мою базу данных и как подключить каждую группу из 3 dropdownlists к дате с выбранными значениями?

ответ

1

Следующий код работает для меня:

public Control FindControlRecursivelyByID(Control controlToSearch, string controlToFind) 
{ 
    Control rtnCtrl = null; 
    foreach (Control ctrl in controlToSearch.Controls) { 
     if (ctrl != null && ctrl.ID == controlToFind) { 
      rtnCtrl = ctrl; 
     } else { 
      if (ctrl.HasControls & rtnCtrl == null) { 
       rtnCtrl = FindControlRecursivelyByID(ctrl, controlToFind); 
      } 
     } 
    } 
    return rtnCtrl; 
} 

При вызове этого метода, вы должны сделать DirectCast также:

((TextBox)FindControlRecursivelyByID(this.Page, "controlID")).Text == "SomeText"