Question

Je suis en train de créer un cadre de formulaires pour un projet et j'ai constaté que lorsque j'essayais de définir par programme la propriété AssociatedControlID de asp: Label à sa zone de texte associée, je devais appeler . ClientID pour que ID soit renseigné (ne soit pas nul).

Lors du débogage, cette utilisation de la fenêtre intermédiaire montre le problème:

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

(la valeur est présente la deuxième fois ID est appelée)

Je suis en train de définir _inputLabel.AssociatedControlID = _inputTextBox.ID dans un CreateChildControls () , et j'ai essayé dans RenderContents () de mon WebControl.

J'ai d'abord essayé de charger ClientID dans une variable temporaire non utilisée, et cela fonctionne, par exemple:

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

Donne: (correct)

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

Au lieu de: (incorrect)

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

Ma question est la suivante: pourquoi dois-je effectuer ce piratage? Existe-t-il un meilleur moyen pour que ID soit correctement peuplé?

Merci.

Était-ce utile?

La solution

La meilleure chose à faire est de définir vous-même l’ID sur le contrôle. Si ce n'est pas le cas, l'une d'entre elles sera automatiquement générée lorsque la méthode EnsureID des contrôles protégés est appelée.
Cette méthode est automatiquement appelée à différents moments, y compris, mais sans s'y limiter, lorsque vous accédez au getter pour ClientID .
Vous devez également savoir que si vous manipulez des contrôles de manière dynamique, il est possible que les identifiants générés de manière dynamique puissent varier en fonction de l'ordre dans lequel vous ajoutez les contrôles à la page.
De même, même si vous ne créez pas les contrôles de manière dynamique, l'identifiant généré de manière dynamique peut varier si vous forcez la génération de l'identifiant (en accédant à ID client ) dans un ordre différent.

Autres conseils

L'ID des contrôles créés dynamiquement est null, sauf définition explicite jusqu'à ce que la méthode RenderControl soit appelée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top