ASP.NET网络控制&;页面-动态添加控件(如TextBox)
我正在尝试创建一个带有文本框的自定义服务器控件(WebControl) 我将asp.net文本框添加到CreateChildControls覆盖中的自定义控件。在OnInit覆盖中,我将事件处理程序添加到TextBox.TextChanged 一切都正常,只不过它从不点火。我查看了viewstate,它看起来好像我的textbox从未将其文本属性保存在viewstate中。我尝试在不同的地方设置文本,包括构造函数,但没有任何效果 如何将TextBox动态添加到WebControl中,以将其文本保存在viewstate中,并将TextChanged事件触发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代码背后的例子,动态添加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事件在背后工作吗?我不想自动回发。当用户单击单独的按钮时会发生回发。