Pregunta

Estoy creando un marco de formularios para un proyecto, y he encontrado que al intentar establecer mediante programación la propiedad AssociatedControlID de asp: Label en su TextBox asociado, tengo que llamar ClientID para obtener ID para rellenar (no ser nulo).

Durante la depuración, este uso de la ventana intermedia muestra el problema:

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

(el valor está presente 2a. vez que se llama ID )

Estoy configurando _inputLabel.AssociatedControlID = _inputTextBox.ID en un CreateChildControls () anulado, y lo he probado en RenderContents () de mi control web.

He intentado cargar ClientID primero en una variable temporal no utilizada, y funciona, por ejemplo:

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

Da: (correcto)

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

En lugar de: (incorrecto)

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

Mi pregunta es: ¿Por qué tengo que realizar este truco? ¿Existe una mejor manera de que se pueda rellenar de manera confiable ID ?

Gracias.

¿Fue útil?

Solución

Lo mejor que puedes hacer es establecer la ID en el control. Si no lo hace, se generará uno automáticamente cuando se llame al método protegido por ID de garantía . Este método se llama automáticamente en varios momentos, incluido, entre otros, cuando se accede al captador para ClientID .
También debe tener en cuenta que si está manipulando dinámicamente los controles, es posible que las identificaciones generadas dinámicamente varíen según el orden en que agregue los controles a la página. Además, incluso si no está creando dinámicamente los controles, la ID generada dinámicamente puede variar si fuerza la generación de ID (accediendo a ClientID ) en un orden diferente.

Otros consejos

El ID de los controles creados dinámicamente es nulo a menos que se defina explícitamente hasta que se llame al método RenderControl.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top