<% = aspControlID.ClientID%> est un contrôle côté serveur, mais vous essayez de lui transmettre un nom de variable client. Au moment où testName a la valeur 'txtTest', c'est trop tard, vous êtes déjà sur le client.
Il existe un certain nombre d'alternatives pour obtenir les ID client côté serveur Rick Stahl discusses.
1) Vous pouvez pré-charger tous les identifiants de contrôle dont vous avez besoin, ils les interrogent (il utilise jquery) lorsque vous avez besoin de leurs éléments.
var ids = {
txtSymbol: "#<%= txtSymbol.ClientID %>",
PageContent: "#<%= PageContainer.ClientID %>"
}
Cela peut aussi être écrit:
var txtSymbol = document.getElementById('<%= txtSymbol.ClientID %>');
var txtBlah = document.getElementById('<%= txtBlah.ClientID %>');
2) Ou, il a écrit une fonction qui obtenir un contrôle pour vous de la clientside
function $$(id, context) {
var el = $("#" + id, context);
if (el.length < 1)
el = $("[id$=_" + id + "]", context);
return el;
}
Soyez conscient qu'il ya quelques mises en garde sérieuses. Cela dépend de JQuery, assurez-vous donc d'inclure cette bibliothèque et utilisez-la comme ceci $$ ('myASPControlID'). Val ('new val'); Le problème est que si vous avez des contrôles qui créent d'autres contrôles, comme des vues de liste, des répéteurs, des grilles de vues, etc. Trouver ensuite une seule instance d'un contrôle enfant prendra une certaine stratégie. Dans cette situation, cet outil obtiendra seulement la première instance d'un contrôle répété.
Néanmoins, la fonction fournit un moyen de résoudre ce problème en vous permettant de spécifier un élément conteneur dans le second champ.
EDIT
Hey L G, si vous avez vraiment besoin de passer votre variable du côté client, puis il suffit d'ajouter la deuxième fonction et un lien vers la bibliothèque JQuery. Ensuite, vous pouvez obtenir votre contrôle avec ce code simple:
var testName = 'txtTest';
var testCntrl = $$(testName);
Comment le code javascript génère-t-il des erreurs de compilation dans le compilateur C#? –