ASP.NET WebControl&ページ-コントロール(TextBoxなど)を動的に追加する
-
06-07-2019 - |
質問
テキストボックスを使用してカスタムサーバーコントロール(WebControl)を作成しようとしています。
CreateChildControlsオーバーライドのカスタムコントロールにasp.netテキストボックスを追加します。 OnInitオーバーライドで、イベントハンドラーをTextBox.TextChangedに追加します。
すべてが機能しますが、TextChangedが発生することはありません。ビューステートを見て、テキストボックスがビューステートにTextプロパティを保存しないようです。コンストラクターを含むさまざまな場所でTextを設定しようとしましたが、何も機能しません。
テキストをビューステートに保存し、TextChangedイベントを発生させるためにTextBoxをWebControlに動的に追加するにはどうすればよいですか?
TextBoxが動的に追加され、TextChangedイベントが発生するWebControlコードビハインドの例を高く評価します。
解決 2
それを修正しました。動的コントロールを作成し、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オーバーライドに初期化コードを配置します
他のヒント
イベントを発生させるには、動的に作成されたコントロールを各ポストバックで再度作成する必要があります(pageInitイベントの方が適切なオプションです)。
ところで、TextChangedイベントでポストバックを生成するには、コントロールのAutoPostbackもtrueに設定する必要があります。
これが役立ちます。つまり、動的に追加されたコントロールのビューステートを自分で処理する必要があります。