ASP.NET WebControl & Page - Динамическое добавление элементов управления (например, TextBox) - PullRequest
1 голос
/ 22 июня 2009

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

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

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

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

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

Ответы [ 3 ]

1 голос
/ 22 июня 2009

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

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

1 голос
/ 23 июня 2009

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

Вот рабочий пример для Codebehind страницы:

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

0 голосов
/ 22 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...