2009-01-19 3 views
2

J'ai créé une sous-classe de Table dans mon projet ASP.NET qui crée. La table utilise une classe qui formate et crée TableRows et TableCells que nous pouvons appeler RowCreator. MyTable appelle rowCreator.CreateRow() et récupère un TableRow avec beaucoup de goodies.Comment puis-je obtenir le bon ClientID pour mon TextBox ASP.NET?

Dans cette TableRow il y a un TextBox qui est censé déclencher une méthode javascript sur l'événement onblur, qui est ajouté par la classe RowCreator.

textBox.Attributes.Add("onblur", "javascriptMethod('" + textbox.ClientID + "');");

J'ai aussi créé une sous-classe essayé de textBox qui met en œuvre une méthode qui ajoute l'événement onblur:

Attributes.Add("onblur", "javascriptMethod('" + this + "');")

Ce qui ne fonctionne pas. L'ID est juste l'espace de noms de la sous-classe textbox.

Et la méthode JavaScript est très simple:

function javascriptMethod(boxId) { alert(boxId); }

Le problème est, et je suppose que cela est parce que le contrôle de la zone de texte n'a pas été ajouté à la encore la collecte de contrôle, que le boxId n'est pas le bon identifiant client. C'est la même chose que l'ID côté serveur. Est-il possible d'obtenir l'ID approprié sans avoir à ajouter la ligne à l'aide de Controls.Add sur la page en premier? D'autres suggestions?

La raison pour laquelle je fais cela est de lire le contenu de la zone de texte à partir d'une fonction javascript à chaque fois qu'elle a été modifiée. Peut-être qu'il y a une meilleure façon de le faire?

Répondre

7

Vous pouvez changer l'appel javascript à ceci:

textBox.Attributes.Add("onblur", "javascriptMethod(this);"); 

Ensuite, vous pouvez accéder à la zone de texte dans votre méthode javascript:

function javascriptMethod(textbox) { alert(textbox.id); } 

De cette façon, vous aurez pas besoin d'utiliser le ClientID de le contrôle de la zone de texte.

+0

Une solution simple et élégante. – Raithlin

Questions connexes