ASP.NET WebControl&ページ-コントロール(TextBoxなど)を動的に追加する

StackOverflow https://stackoverflow.com/questions/1028905

質問

テキストボックスを使用してカスタムサーバーコントロール(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に設定する必要があります。

これが役立ちます。つまり、動的に追加されたコントロールのビューステートを自分で処理する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top