2011-11-08 3 views
1

Nous essayons de mettre à niveau notre site de la version 3.5 vers la version 4.0. Tout semble être bon côté serveur - Mon seul problème à ce jour est l'ID d'une poignée de contrôles personnalisés.ID client ASP.Net 3.5 différent de 4.0

La décélération des contrôles ressemble:

<div runat="server" id="gglSelectedItemsImage" class="gplSelectedItemsText">None selected</div> 

Lors du rendu en 3.5 le contrôle ressemble à:

<div id="gplCategories_gglSelectedItemsImage" class="gplSelectedItemsText">Some Content</div> 

Et 4.0 comme:

<div id="ctl00_ctl00_ctl00_ContentPlaceHolder1_Content_gplCategories_gglSelectedItemsImage" class="gplSelectedItemsText">Some Content</div> 

Cela provoque quelques-uns des notre JavaScript/JQuery plus ancien à l'échec.

J'ai défini <pages clientIDMode="AutoID" controlRenderingCompatibilityVersion="3.5" /> dans le fichier web.config afin que 99,9% des ID soient corrects. La chose la plus étrange est le contrôle 3.5 ressemble à rendre avec clientIDMode="Predictable" plutôt que les ID automatiques 3.5 standard?

En outre, si j'accéder à la version 4.0 du contrôle clientID côté serveur, il semble correct:

Me.gglSelectedItemsImage.ClientID = "gplCategories_gglSelectedItemsImage" 

C'est le principal problème, toutes les valeurs insérées dans le code JavaScript ect sont en fait les mauvaises valeurs.

Notre site est malheureusement trop volumineux pour réparer cette erreur. J'ai donc besoin de comprendre pourquoi le contrôle affiche son ID différemment et l'implémente sur le site.

Toutes les idées que vous avez seront très appréciées.

+3

Pourquoi votre JavaScript ancien/jQuery comptent sur ids clients hardcoded de toute façon? – LukeH

+0

Je suis d'accord avec LukeH. La propriété ClientID existe donc vous ne les fabriquez pas vous-même, quelle que soit la version du framework. –

+0

C'était avant mon temps, donc je ne sais pas. Dans ce cas, nous avons un contrôle générique qui exclut un clientID d'un autre contrôle ("gglSelectedItemsImage") puis utilise Jquery pour mettre à jour sa valeur. Le problème est provoqué par le serveur pensant que le clientID est "gplCategories_gglSelectedItemsImage" quand les documents rendus réels sont "ctl00_ctl00_ctl00_ContentPlaceHolder1_Content_gplCategories_gglSelectedItemsImage" class = "gplSelectedItemsText" – pingoo

Répondre

0

Vous devez accéder à l'ID du client est comme ça dans votre fichier .ASPX:

<%=gglSelectedItemsImage.ClientID%> 
+0

C'est le problème que le ClientID des serveurs n'est pas le même que les contrôles réels. – pingoo

+0

Cela semble très étrange. C'est presque comme si le site pensait qu'il fonctionnait comme autoid mais la page fonctionne en interne comme prévisible. Vous pouvez essayer d'injecter l'ID client dans le javascript via l'événement SaveStateComplete. Je ne peux pas voir comment l'id de client serait erroné à ce point. – Graymatter

+0

que diriez-vous d'y accéder via un fichier 'js'? vos blocs de code ne fonctionnent pas là ... donc votre réponse échoue (en 4.0 vous pouvez mettre votre clientidmode en statique ce qui fonctionne bien, mais en 3.5 c'est un BS total) – HellBaby

1

Essayez cette

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

Merci Fahad mais j'ai aussi déjà controlRenderingCompatibilityVersion = " 3.5 "(Je vais mettre à jour ma question pour l'inclure) – pingoo

+0

Avez-vous plusieurs fichiers web.config? – Fahad

+0

Nous avons différents approfondissements sur la configuration de construction actuelle (débogage/Live ect) mais c'est tout. Après avoir regardé il n'y a rien qui remplacerait l'étiquette normale, j'ai essayé cependant mais cela n'a pas aidé (peu de plaisir - aurait été aussi énorme moment de facepalm). – pingoo

1

Dans le second exemple vous utilisez une page principale, ce qui explique pourquoi la ClientID est différent. Il ne devrait pas faire une différence mais si vous faites référence à la commande par ClientID:

var ctrl = $("#<%=gglSelectedItemsImage.ClientID%>"); 
+0

Les deux exemples proviennent du même site Web, l'un est conforme à 3.5 et l'autre à 4.0. Donc, les influences de la page maître devraient avoir un effet à la fois je suppose? – pingoo

Questions connexes