2010-06-09 4 views
8

Nous venons de mettre à jour notre application de ASP.Net 2.0 à ASP.Net 4.0.Quel est le paramètre correct de ClientIDMode dans ASP.Net 4 pour obtenir le rendu ASP.Net 2.0.

Nous avons inclus dans le web.config dans l'élément <system.web>:

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

Ma compréhension est que cela est censé rendre les contrôles les mêmes que 2.0/.Net 3.5 serait.

... Mais ce n'est pas ... voici un exemple

Ceci est rendu dans la version 2.0:

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

Ceci est la version 4.0:

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

La différence:

2.0 id=grdUserEntity__ctl1_chkSelectAll 
4.0 id=grdUserEntity_ctl01_chkSelectAll 

Selon à ce que je lis ce paramètre de configuration fera ASP.Net 4.0 pour rendre les contrôles du serveur et l'id du client identique à la version précédente.

Que faisons-nous de mal?

Répondre

12

Une modification a été apportée à la manière dont les ID étaient rendus à partir d'ASP.NET 2.0 vers ASP.NET 3.5. Puisque vous allez de 2.0 à 4.0, vous voyez toujours cette différence. Le changement était dû aux améliorations de la conformité XHTML.

Vous pouvez essayer de revenir au rendu 2.0 avec le paramètre compht xhtmlCompliance. Encore un autre paramètre de compat, oui :) Ça devrait marcher, mais honnêtement, je ne suis pas sûr de la façon dont ce vieux compat est testé en 4.0, et je sais qu'il ne serait pas compatible avec UpdatePanel, si vous aviez l'intention d'utiliser cette.

Y a-t-il une raison pour laquelle vous voulez conserver le rendu 2.0? Juste peur des régressions, ou avez-vous des régressions réelles connues?

Réglage XHTML: http://msdn.microsoft.com/en-us/library/ms178159.aspx

+2

Nous avons javascript qui est basé sur la façon dont 2.0 rends. Donc, oui, nous avons plusieurs problèmes de régression maintenant. – PilotBob

+0

Oui ... ceci résout la régression. Merci beaucoup. – PilotBob

+0

Super! Bon à entendre. – InfinitiesLoop

1

Pour les futurs lecteurs de ce poste, vous pouvez atténuer les problèmes de compatibilité en utilisant la construction <%=objectid.ClientId %> dans votre page ASP.NET. Exemple: Supposons que votre zone de texte s'appelle txtInput (qu'ASP.NET affiche comme id = ctl00_cphMainContent_txtInput) que vous devez référencer dans un code javascript côté client. Vous pouvez faire référence à cet objet avec le code javascript suivant dans votre page ASP.NET:

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

Lors de l'exécution, il sera traduit automatiquement dans le côté client suivant javascript:

str txtInputObjNm = "ctl00_cphMainContent_txtInput"; 

Si .NET "décide" de changer la façon dont le client est assigné, votre code fonctionnera toujours.

+5

cela suppose bien sûr que vous mettez votre javascript en ligne sur le formulaire Web. Nous préférons utiliser Javascript non intrusif et ne pas le faire. – PilotBob

1

Dans une application 4.0 pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" va complètement gâcher le style dans la page Site.master. Par exemple, les menus seront presque invisibles dans le concepteur et perdront complètement leur style dans le navigateur. Fondamentalement, le style sera perdu dans le concepteur.J'ai trouvé cela en réglant la structure cible de 4.0 à 3.5 et de nouveau à 4.0. Après cela, le style était alambiqué. Après avoir comparé tous les fichiers à une bonne application, j'ai finalement trouvé cette ligne dans web.config. Je l'ai enlevé, et mes problèmes de style ont disparu.

Questions connexes