2009-05-22 11 views
5

tengo una página con algunos controles, controles de usuario, etc.runat = añadiendo "servidor" cambia el comportamiento de la disposición

cuando cambio de un div llanura <div id="foo"> a un <div id="foo" runat="server"> la disposición cambios completos.

¿Por qué es eso y cómo puedo evitarlo?

estoy usando .NET Framework 2.0

¿Es porque .NET cambia mi identificación, lo que obviamente no quiero?

+0

Danos un ejemplo de código para que podamos entender mejor tu situación. –

+0

¿Tiene algún código del lado del servidor que se aplique a todos los controles (controles con runat = "servidor"), como agregar atributos o estilos personalizados? –

+1

O mejor aún, ¿sus divs tienen ID para el estilo de CSS? Agregar runat = "server" probablemente cambie el ClientID para ese control cuando se represente, rompiendo su CSS. –

Respuesta

12

Si dirige el ID del control div en CSS y luego ejecuta el control en el servidor, verá que ya no aplica el estilo.

Esto se debe a que ASP.NET tiene un mecanismo incorporado (INamingContainer) para garantizar que no haya varios controles con el mismo nombre. Esto se logra mediante la adición de prefijos de contenedores por lo que terminan con:

<div id="ctl00_ctl00_myDivName" runat="server" /> 

La forma más sencilla de evitar esto es para cambiarlo de trabajar en un ID de trabajar en una clase:

<div class="myDiv" runat="server"></div> 

Alternativamente, me creen que XHTML requiere que Divs tienen etiquetas de cierre a fin de utilizar

<div runat="server">Some content</div> 
0

Cuando agrega runat = "server" a un div, el sistema genera automáticamente el ID para él. Se lo conoce como ID Mangling. Lamentablemente, no hay mucho que puedas hacer en el marco 2.0 para los divs que conozco (sin que sea un problema), pero en 4.0 estamos obteniendo una anulación ... Sin embargo, en controles personalizados (en 2.0)) puede anular los campos ClientID y UniqueID. Entonces, si creó una clase MyDiv que usó el div como base y luego creó los campos ClientID/UniqueID, debería estar bien.

Su otra opción sería actualizar su CSS/javascript para usar la identificación destrozada. Es bastante estático en función de la posición dentro de la página ya que ASP.Net lo usa para encontrar un control durante la devolución de datos.

+0

Me sorprende que sugieras utilizar una identificación destrozada en el diseño, significaría que si alguna vez cambiaste la jerarquía de control, el CSS ya no se aplicaría. Mala práctica en mi libro. Intercambiarlo para usar una clase es una opción mucho más fácil de mantener. –

+1

No usaría el ID destrozado en CSS. –

+2

Nunca dije que fuera una buena opción. Solo una opción – JaCraig

0

Añadir ClientMode = "estática" esto hará que su identificación no es cambiado a la identificación del cliente para su control.

Cuestiones relacionadas