ASP.NET WebControl & amp; Страница - Добавление элементов управления (например, TextBox) динамически

StackOverflow https://stackoverflow.com/questions/1028905

Вопрос

Я пытаюсь создать пользовательский серверный элемент управления (WebControl) с текстовым полем.

Я добавляю текстовое поле asp.net в пользовательский элемент управления в переопределении CreateChildControls. В переопределении OnInit я добавляю обработчик событий в TextBox.TextChanged.

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

Как я могу динамически добавить TextBox в WebControl, чтобы сохранить его текст в viewstate и запустить событие TextChanged?

Я был бы очень признателен за пример кода WebControl: динамическое добавление TextBox и запуск события TextChanged.

Это было полезно?

Решение 2

исправил это. динамическое управление должно быть создано и добавлено в событие Init. Ему должен быть присвоен идентификатор без специальных символов ASP.NET («$» или «:» внутри пользовательского идентификатора сломают вещи). Все свойства должны быть назначены после добавления элемента управления в дерево элементов управления.

вот рабочий пример кода страницы:

private readonly TextBox _textBoxTest = new TextBox();

protected void Page_Init( object sender, EventArgs e )
{
    this.form1.Controls.Add( _textBoxTest ); 
    _textBoxTest.Text = "TestBoxTest";
    _textBoxTest.ID = "TestBoxTestId";
    _textBoxTest.TextChanged += this._textBoxTest_TextChanged;
}

void _textBoxTest_TextChanged( object sender, EventArgs e )
{
    _textBoxTest.Text = "Worked";
}

для WebControl поместите код инициализации в переопределение OnInit

Другие советы

Динамически созданный элемент управления должен быть создан снова в каждом посте назад (событие pageInit - лучшая опция) для запуска события.

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

Это поможет вам. Короче говоря, вам нужно самостоятельно обрабатывать состояние представления для вашего динамически добавляемого элемента управления.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top