2010-04-13 8 views
1

Je viens de mettre à jour une application de .NET 2.0 vers .NET 4.0 et j'ai remarqué ce qui suit.ASP.NET 4 change avec les noms automatiques des contrôles

Par exemple, j'avoir le contrôle suivant:

<input type="hidden" name="ctl00$cphMain$hfdFueraHorarioOficinaConfirmado" 
id="cphMain_hfdFueraHorarioOficinaConfirmado" value="False" /> 

puis en javascript je l'ai fait avant:

var hfdFueraHorarioOficinaConfirmado=document.getElementById('ctl00_cphMain_hfdFueraHorarioOficinaConfirmado'); 

mais après avoir vérifié la id dans la source html une fois qu'il rend et faire aussi un débogage avec firebug etc il a changé de:

ctl00_cphMain_hfdFueraHorarioOficinaConfirmado 

à:

cphMain_hfdFueraHorarioOficinaConfirmado 

Quelqu'un peut-il expliquer pourquoi? Dois-je essentiellement faire une recherche et remplacer et supprimer le ctl00?

De toute évidence, la ligne javascript avec le ctl00_ à l'avant renvoie null car il n'existe pas, mais en supprimant cela renvoie l'objet.

Toute aide ou idées vraiment apprécié

Répondre

3

Il y a eu quelques changements, qui ressemblent pour le mieux, mais Microsoft ont créé un indicateur de compatibilité vous pouvez définir pour conserver la compatibilité avec .NET 3,5 - see this article.

Vous pouvez définir la propriété ClientIDMode-AutoID dans votre fichier web.config pour conserver le comportement précédent, et la remplacer sur les contrôles individuels au fur et vous commencez à faire des changements tout au long de votre code.

+0

Merci, juste ce que je cherchais ... –

1

Dans vos fichiers de script, vous devriez regarder en utilisant toujours le ClientID que vous obtenez sur le côté serveur (et la sortie comme une variable de script sur la page).

Je pense qu'il ya aussi des moyens de mettre la façon dont la désignation de contrôle se fait dans la version 4.0, vous pourriez être en mesure de choisir un paramètre qui permet de résoudre votre problème:

http://weblogs.asp.net/asptest/archive/2009/01/06/asp-net-4-0-clientid-overview.aspx

+0

article général sur le HTML propre ... http://weblogs.asp.net/scottgu/archive/2010/03/30/cleaner-html-markup-with-asp-net-4-web- forms-client-ids-vs-2010-and-net-4-0-series.aspx – cyberzed

1

ASP.Net génère automatiquement le client Identifiants pour les contrôles côté serveur.

Comme vous l'avez découvert, vous ne devez pas compter sur le fait que ces noms générés automatiquement restent les mêmes. Dans ASP.Net 4.0, vous pouvez définir la propriété ClientIDMode sur Static. Votre identifiant sera alors utilisé tel quel.

Dans toutes les versions d'ASP.Net, vous devez utiliser la propriété ClientID au lieu de coder en dur l'ID.

Par exemple: (Dans la page ASPX)

var hfdFueraHorarioOficinaConfirmado = 
    document.getElementById('<%= hfdFueraHorarioOficinaConfirmado.ClientID %>'); 
+0

Ce n'est pas exactement le cas de Static. Il * peut * être changé en fonction du conteneur. – NotMe

+0

@Chris: Non; ça ne sera jamais changé. – SLaks

+0

Je déteste différer. Mais si vous avez un contrôle d'étiquette dans un répéteur, l'ID de l'étiquette changera indépendamment du fait que ClientIDMode soit statique ou AutoID. Le nom du répéteur sera ajouté au début. Par conséquent, cela dépend de ce que le parent de votre contrôle est. – NotMe

Questions connexes