ASP.NET WebControl&页面 - 动态添加控件(如TextBox)

时间:2009-06-22 19:09:59

标签: asp.net dynamic-controls web-controls

我正在尝试使用文本框创建自定义服务器控件(WebControl)。

我将asp.net文本框添加到CreateChildControls覆盖中的自定义控件。在OnInit覆盖中,我将事件处理程序添加到TextBox.TextChanged。

一切正常,但TextChanged永远不会发射。我查看了viewstate,看起来我的文本框从未在viewstate中保存其Text属性。我试图在各个地方设置Text,包括构造函数,但没有任何作用。

如何将TextBox动态添加到WebControl以在viewstate中保存Text并让TextChanged事件触发?

我非常感谢WebControl代码的示例,其中TextBox被动态添加并且TextChanged事件被触发。

3 个答案:

答案 0 :(得分:1)

必须在每个帖子中再次创建动态创建的控件(对于要触发的事件,pageInit事件是更好的选项)。

顺便说一句,如果您希望TextChanged事件生成回发,您还必须将控件的AutoPostback设置为true。

答案 1 :(得分:1)

修好了。必须在Init事件中创建并添加动态控件。必须为它分配一个没有特殊ASP.NET符号的ID(自定义ID中的'$'或':'会破坏事物)。控件添加到控件树后,必须分配所有属性。

这是Page 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覆盖中放置初始化代码

答案 2 :(得分:0)

This会帮助你。简而言之,您需要自己处理动态添加控件的视图状态。