2009-10-19 7 views
1

Je veux l'identifiant client d'un contrôle de zone de texte asp.net (txtTest) dans javascript.But le problème ici est l'identifiant de commande provient d'une variable comme indiqué ci-dessousobtenir un ID client d'un contrôle de la variable

var testName = 'txtTest'; 
var testCntrl = document.getElementById('<%=' + testName + '.ClientID %>'); 

Mais son lancer

CS1012: Trop de caractères caractère littéral

peut-on s'il vous plaît aider ....

+0

Comment le code javascript génère-t-il des erreurs de compilation dans le compilateur C#? –

Répondre

1

<% = 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); 
+0

en javascript, nous faisons habituellement document.getElementById ('<% = txtTest.ClientID%>'); ici..la valeur txtTest je dois passer d'une variable..est-il possible ?? –

+0

Hey L G, C'est possible, j'ai fourni deux méthodes différentes. Si vous connaissez le pool de noms de variables que vous pouvez éventuellement souhaiter avant le chargement de la page, utilisez la première méthode pour enregistrer leurs ID dans JavaScript Variable à l'avance. Si vous ne les connaissez pas avant le chargement de la page, utilisez la deuxième méthode. –

+0

Merci Duck..it travaillé –

0

Si ce code est C# (que je suppose, compte tenu de l'erreur de compilation), vous devez entourer les chaînes avec " au lieu de '.

'' est utilisé pour les valeurs char, qui peuvent contenir un seul caractère (ou deux s'il s'agit d'un caractère d'échappement, tel que '\n').

Mais je n'ai pas vraiment la connexion entre l'erreur de compilation et le code, puisque le compilateur C# ne devrait pas se soucier du code javascript ...

2

Essayez ceci:

document.getElementById('<%=txtTest.ClientID %>'); 

Ou plus le long des lignes de votre exemple original:

var testName = '<%=txtTest.ClientID %>'; 

var testCntrl = document.getElementById(testName); 

Il ressort de votre exemple que vous avez réussi à vous confondre sur ce qui est côté serveur et ce est le code côté client.

Questions connexes