2011-12-06 2 views
1

H,Accès à la valeur aspx à partir d'un contrôle utilisateur

Ma page ASPX dispose d'un contrôle utilisateur dans lequel la commande usercontrol contient un bouton. Onclick du bouton dans usercontrol j'essaye de tirer la méthode de javascript. Donc, quand je clique sur le bouton pour exécuter le javascript en quelque sorte, je veux accéder à la valeur de la zone de texte de la page ASPX.

quelque chose comme

this.getElementbyID[txtbox].value.

Est-ce possible? ou existe-t-il un autre moyen d'accéder au contrôle de la page aspx à partir de usercontrol.

Merci à l'avance, Pavan

+1

N'hésitez pas à accepter les réponses et à voter sur les contributions si elles vous sont utiles. Ce sont les contrôles à gauche de chaque réponse. – LarsTech

Répondre

1

Utilisez la méthode FindControl dans le code-behind de contrôle de l'utilisateur. Supposons que la page .aspx ait le contrôle TextBox1 et que la page .aspx soit parent du contrôle utilisateur "dit" alors vous pouvez ajouter la ligne suivante dans le gestionnaire de clic du bouton dans le contrôle utilisateur.

TextBox tx = (TextBox)Parent.FindControl("TextBox1"); 
3

Oui c'est possible puisque après le rendu de la page entière (page aspx + contrôles utilisateur) sont traités comme une page. Ainsi, vous pouvez utiliser n'importe quel javascript valide pour accéder à l'élément tant que vous connaissez l'identifiant client du contrôle que vous recherchez.

je mettrais ce code dans le contrôle de l'utilisateur

<script type="text/javascript"> 
     $(document).ready(function() { 
      $('#yourButtonID').click(function() { 
       //search for your element 
       alert($('input[id$="TextBox1"]').val()); 
      }); 
     }); 
    </script> 

espérons que cette aide!

+0

J'aime votre utilisation du sélecteur Attribute-Ending ("$ =") pour contourner la manipulation .NET des ID clients. Très créatif si vous ne pouvez pas définir ClientIDMode sur 'Statique'. – Graham

0

Oui, il y a plusieurs façons de le faire. Un contrôle utilisateur rend directement au navigateur, de sorte que vous pouvez accéder à un élément par un ID de n'importe où. Je le ferais de cette façon personnellement; vous pouvez ajouter une propriété au code de contrôle de l'utilisateur derrière:

public string TextBoxID 
{ 
    get { return this.TextBox1.ClientID; } 
} 

Puis, dans la page, vous pouvez accéder à l'ID en javascript coté client en utilisant:

document.getElementById('<%= ucUserControlID.TextBoxID %>').value 

Le problème que vous allez avoir est que si la zone de texte dans le contrôle utilisateur est dans une page avec une page maître, l'ID sera ct100_contentplaceholder_somecontainer_usercontrolcontainer_textboxID (quelque chose comme ça). L'astuce pour contourner cela est d'utiliser une approche comme document.getElementById("<%= TextBox1.ClientID %>") mais cela ne fonctionne que si le contrôle est dans le même conteneur où cette instruction est. Puisque le contrôle est dans le contrôle de l'utilisateur, et le JS dans la page, une propriété pour retourner l'ID du client fonctionne bien.

Questions connexes