2010-06-09 19 views
8

Acabamos de actualizar nuestra aplicación de ASP.Net 2.0 a ASP.Net 4.0.¿Cuál es la configuración correcta de ClientIDMode en ASP.Net 4 para obtener la representación ASP.Net 2.0.

hemos incluido en el web.config en el elemento <system.web>:

<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" /> 

Mi opinión es que esto se supone que hacen los controles de la misma como .Net 2.0/3.5 sería.

Sin embargo ... no es ... aquí es un ejemplo

Esto se hizo en 2.0:

<input id="grdUserEntity__ctl1_chkSelectAll" type="checkbox" 
    name="grdUserEntity:_ctl1:chkSelectAll" onclick="javascript:iSelectAll();" /> 

Esto está en 4.0:

<input id="grdUserEntity_ctl01_chkSelectAll" type="checkbox" 
    name="grdUserEntity$ctl01$chkSelectAll" onclick="javascript:iSelectAll();" /> 

La diferencia:

2.0 id=grdUserEntity__ctl1_chkSelectAll 
4.0 id=grdUserEntity_ctl01_chkSelectAll 

Según a lo que leí esa configuración hará que ASP.Net 4.0 renderice los controles del servidor y los identificadores del cliente de forma idéntica a la versión anterior.

¿Qué estamos haciendo mal?

Respuesta

12

Hubo un cambio en cómo se procesaron los ID de ASP.NET 2.0 a ASP.NET 3.5. Como va de 2.0 a 4.0, todavía está viendo esa diferencia. El cambio se debió a mejoras en el cumplimiento de XHTML.

Puede intentar volver a la representación 2.0 con la configuración xhtmlCompliance compat. Sin embargo, otra configuración de compatibilidad, sí :) Debería funcionar, pero sinceramente, no estoy seguro de qué tan bien probada está la antigua configuración de compatibilidad en 4.0, y sé que no sería compatible con UpdatePanel, si planeabas usar ese.

¿Hay alguna razón por la que desee mantener la representación 2.0? ¿Solo miedo a las regresiones, o tiene alguna regresión real conocida?

entorno XHTML: http://msdn.microsoft.com/en-us/library/ms178159.aspx

+2

Tenemos javascript que se basa en la forma en que 2.0 representa. Entonces, sí, tenemos varios problemas de regresión ahora. – PilotBob

+0

Sí ... esto resuelve la regresión. Muchas gracias – PilotBob

+0

¡Genial! Es bueno escuchar – InfinitiesLoop

1

Para los futuros lectores de este post, se puede mitigar los problemas de compatibilidad con el constructo <%=objectid.ClientId %> en su página ASP.NET.

Ejemplo: Supongamos que el cuadro de texto llamado txtInput (que ASP.NET representa como id = ctl00_cphMainContent_txtInput) al que debe hacer referencia en algún código javascript del lado del cliente. Se podría hacer referencia a ese objeto con el siguiente código JavaScript en su página ASP.NET:

str txtInputObjNm = "<%=txtInput.ClientId %>"; 

En tiempo de ejecución, que se traducirá automáticamente en el lado del cliente JavaScript siguiente:

str txtInputObjNm = "ctl00_cphMainContent_txtInput"; 

Si .NET "decide" cambiar la forma en que se asigna el cliente, su código seguirá funcionando.

+5

esto supone, por supuesto, que pone su javascript en línea en el formulario web. Preferimos usar JavaScript no intrusivo y no hacer esto. – PilotBob

1

En una aplicación 4.0 pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" se arruinará por completo el estilo en la página Site.master. Por ejemplo, los menús serán casi invisibles en el diseñador y perderán completamente su estilo en el navegador. Básicamente, el diseño se perderá en el diseñador.

Encontré esto estableciendo el marco de destino de 4.0 a 3.5 y de nuevo a 4.0. Después de esto, el estilo fue complicado. Después de comparar todos los archivos a una buena aplicación, finalmente encontré esta línea en web.config. Lo eliminé y mis problemas de diseño desaparecieron.

Cuestiones relacionadas