Domanda

Sto cercando di creare un controllo server personalizzato (WebControl) con una casella di testo.

Aggiungo la casella di testo asp.net al controllo personalizzato nell'override di CreateChildControls. Nella sostituzione OnInit aggiungo il gestore eventi a TextBox.TextChanged.

Tutto funziona, tranne che TextChanged non si attiva mai. Ho guardato viewstate e sembra che la mia casella di testo non salvi mai la proprietà Text nel viewstate. Ho provato a impostare il testo in vari punti, incluso il costruttore, ma non funziona nulla.

Come posso aggiungere TextBox in modo dinamico a WebControl per salvarlo in viewstate e far scattare l'evento TextChanged?

Gradirei molto un esempio di codice WebControl dietro con TextBox che viene aggiunto in modo dinamico e l'evento TextChanged che viene generato.

È stato utile?

Soluzione 2

risolto. il controllo dinamico deve essere creato e aggiunto nell'evento Init. Deve essere assegnato un ID senza simboli ASP.NET speciali ('$' o ':' all'interno dell'ID personalizzato interromperà le cose). Tutte le proprietà devono essere assegnate dopo aver aggiunto il controllo all'albero dei controlli.

ecco un esempio funzionante per Code codehind:

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";
}

per WebControl inserire il codice di inizializzazione in OnInit override

Altri suggerimenti

Il controllo creato dinamicamente deve essere creato di nuovo in ogni post, (l'evento pageInit è l'opzione migliore) affinché l'evento venga generato.

A proposito, se vuoi che l'evento TextChanged generi un postback devi anche impostare AutoPostback del controllo su true.

Questo ti aiuterà. In breve, devi gestire il viewstate per il tuo controllo aggiunto dinamicamente da solo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top