Domanda

Sto creando un framework di moduli per un progetto e ho scoperto che quando provo a impostare programmaticamente la proprietà AssociatedControlID dell'asp: Label sul TextBox associato, devo chiamare ID cliente per ottenere ID da popolare (non essere nullo).

Durante il debug, questo uso della finestra intermedia mostra il problema:

_inputTextBox.ID
null
_inputTextBox.ClientID
"ctl00_MainContent_ctl01"
_inputTextBox.ID
"ctl01"

(il valore è presente la seconda volta che viene chiamato ID )

Sto impostando _inputLabel.AssociatedControlID = _inputTextBox.ID in un CreateChildControls () ignorato e ho provato in RenderContents () di il mio WebControl.

Ho provato a caricare ClientID in una variabile temp inutilizzata per prima, e funziona, ad esempio:

var x = _inputTextBox.ClientID;
_inputLabel.AssociatedControlID = _inputTextBox.ID;

Dà: (corretto)

<label for="ctl00_MainContent_ctl01">Name of customer</label>
<input type="text" id="ctl00_MainContent_ctl01" name="ctl00$MainContent$ctl01"/>

Invece di: (errato)

<span>Name of customer</span>
<input type="text" id="ctl00_MainContent_ctl01" name="ctl00$MainContent$ctl01"/>

La mia domanda è: perché devo eseguire questo hack? Esiste un modo migliore per popolare in modo affidabile ID ?

Grazie.

È stato utile?

Soluzione

La cosa migliore da fare è impostare personalmente l'id sul controllo. In caso contrario, verrà generato automaticamente quando viene chiamato il metodo GuaranteID protetto dai controlli.
Questo metodo viene chiamato automaticamente in vari momenti, incluso, ma non solo, quando si accede al getter per ClientID . Dovresti anche essere consapevole che se stai manipolando dinamicamente i controlli, è possibile che gli ID generati dinamicamente possano variare in base all'ordine in cui aggiungi i controlli alla pagina.
Inoltre, anche se non si stanno creando dinamicamente i controlli, l'id generato dinamicamente può variare se si forza la generazione dell'id (accedendo a ClientID ) in un ordine diverso.

Altri suggerimenti

L'ID dei controlli creati dinamicamente è null a meno che non sia esplicitamente definito fino a quando non viene chiamato il metodo RenderControl.

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