Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET网络控制&;页面-动态添加控件(如TextBox)_Asp.net_Dynamic Controls_Web Controls - Fatal编程技术网

ASP.NET网络控制&;页面-动态添加控件(如TextBox)

ASP.NET网络控制&;页面-动态添加控件(如TextBox),asp.net,dynamic-controls,web-controls,Asp.net,Dynamic Controls,Web Controls,我正在尝试创建一个带有文本框的自定义服务器控件(WebControl) 我将asp.net文本框添加到CreateChildControls覆盖中的自定义控件。在OnInit覆盖中,我将事件处理程序添加到TextBox.TextChanged 一切都正常,只不过它从不点火。我查看了viewstate,它看起来好像我的textbox从未将其文本属性保存在viewstate中。我尝试在不同的地方设置文本,包括构造函数,但没有任何效果 如何将TextBox动态添加到WebControl中,以将其文本保

我正在尝试创建一个带有文本框的自定义服务器控件(WebControl)

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

一切都正常,只不过它从不点火。我查看了viewstate,它看起来好像我的textbox从未将其文本属性保存在viewstate中。我尝试在不同的地方设置文本,包括构造函数,但没有任何效果

如何将TextBox动态添加到WebControl中,以将其文本保存在viewstate中,并将TextChanged事件触发


我非常感谢一个WebControl代码背后的例子,动态添加TextBox并触发TextChanged事件。

将帮助您解决这个问题。简而言之,您需要自己处理动态添加控件的viewstate。

必须在每次回发中再次创建动态创建的控件(pageInit事件是更好的选项),才能触发事件


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

修复了它。必须在Init事件中创建并添加动态控件。必须为其分配一个不带特殊ASP.NET符号的ID(自定义ID中的“$”或“:”将破坏一切)。将控件添加到控件树后,必须指定所有属性

下面是页面代码隐藏的一个工作示例:

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 override中放置init代码,但也需要恢复viewstate。如果您不手动处理viewstate,页面会将其视为一个新控件,并且不会正确触发任何事件。rie819,对不起,我已经使用动态创建的控件很多次了,从来没有必要特别注意viewstate,这和数据绑定有关吗?你能提供一个页面代码的例子,让TextChange事件在背后工作吗?我不想自动回发。当用户单击单独的按钮时会发生回发。