我正在尝试使用文本框创建自定义服务器控件(WebControl)。
我将asp.net文本框添加到CreateChildControls覆盖中的自定义控件。在OnInit覆盖中,我将事件处理程序添加到TextBox.TextChanged。
一切正常,但TextChanged永远不会发射。我查看了viewstate,看起来我的文本框从未在viewstate中保存其Text属性。我试图在各个地方设置Text,包括构造函数,但没有任何作用。
如何将TextBox动态添加到WebControl以在viewstate中保存Text并让TextChanged事件触发?
我非常感谢WebControl代码的示例,其中TextBox被动态添加并且TextChanged事件被触发。
答案 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会帮助你。简而言之,您需要自己处理动态添加控件的视图状态。