1

テキストボックスを使用してカスタムサーバーコントロール(WebControl)を作成しようとしています。

CreateChildControlsオーバーライドのカスタムコントロールにasp.netテキストボックスを追加します。OnInitオーバーライドで、TextBox.TextChangedにイベントハンドラーを追加します。

TextChangedが起動しないことを除いて、すべてが機能します。ビューステートを確認しましたが、テキストボックスのTextプロパティがビューステートに保存されていないようです。コンストラクターを含むさまざまな場所にTextを設定しようとしましたが、何も機能しません。

TextBoxをWebControlに動的に追加して、そのテキストをビューステートに保存し、TextChangedイベントを発生させるにはどうすればよいですか?

TextBoxが動的に追加され、TextChangedイベントが発生するWebControlコードの例をいただければ幸いです。

4

3 に答える 3

1

イベントを発生させるには、動的に作成されたコントロールをポストバックごとに再度作成する必要があります(pageInitイベントの方が適しています)。

ところで、TextChangedイベントでポストバックを生成する場合は、コントロールのAutoPostbackもtrueに設定する必要があります。

于 2009-06-22T19:16:24.487 に答える
1

修正しました。動的制御を作成し、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オーバーライドに配置します

于 2009-06-22T21:58:28.417 に答える
0

これはあなたを助けるでしょう。つまり、動的に追加されたコントロールのビューステートを自分で処理する必要があります。

于 2009-06-22T19:11:37.677 に答える