2010-12-08 11 views
2

J'ai une MasterPage que dans sa section de contenu j'ai ajouté un élément FORM. Lors de l'accès à cette page, tous mes contrôles sont renommés puisque le FORM est runat = server. Et ainsi lors de la sélection dans jquery, même le formulaire a été renomméproblème avec masterpage et jquery

Comment puis-je résoudre ce problème?

grâce

Répondre

1

Avec une page maître, tous les éléments auront ct100__etc ajouté à l'ID de l'élément. C'est une caractéristique puisque c'est un conteneur de nommage. En règle générale, la façon de travailler autour d'elle est d'utiliser la syntaxe comme:

$("#<%= button.ClientID %>").click(..); 

Pour accéder aux plus les ID, ou se fonder sur des classes CSS pour identifier les éléments. Une autre astuce consiste à envelopper certaines sections du formulaire avec un élément DIV HTML et lui donner un ID à cibler.

HTH.

0

Vous pouvez utiliser Control.ClientID pour cela. Quelque chose comme

$("#<%= yourelement.ClientID %>") 
+0

Je ne veux pas qu'il renommer mes objets – Himberjack

+0

Vous ne pouvez pas le faire. C'est un comportement par défaut. – rahul

1

Vous ne pouvez pas, c'est le comportement de .Net. Ce que vous pouvez faire est d'ajuster votre utilisation de jquery pour incorporer le ClientID des contrôles que vous utilisez. Le plus simple est d'avoir une sorte de variable de traduction injectée dans un script dans la tête quelque part.

<script language="javascript"> 
    var myControl1 = '<%=myControl1.ClientID %>'; 
</script> 

Ensuite, vous pouvez utiliser MyControl1 comme une variable de chaîne pour injecter l'identifiant client dans vos appels jquery de façon plus lisible.

+0

Avant cela, j'ai FORM encadrant la section de contenu et à l'intérieur d'un autre formulaire et il n'a fait aucun problème que ce soit – Himberjack

+0

@oshafran - Je ne comprends pas vraiment ce que vous dites dans votre commentaire. –

0

Vous pouvez également créer un CssClass et un accès par $ ('classname')

<asp:TextBox id="tb4" Text="Hello World!" cssclass="txtboxtb4" runat="server" /> 


alert($('.txtboxtb4').val()); 
2

En plus de l'approche .ClientID suggérée dans la plupart des autres réponses, vous pouvez utiliser le sélecteur endswith de jQuery.

par exemple: Sélectionnez l'élément dont l'id endswith "myid" (par exemple ctl001_form1_myid)

$('[id$="myid"]'); 

ou si vous utilisez .net 4, vous pouvez définir ClientIdMode="false" pour empêcher le changement de nom.

0

Une autre façon est de mettre les contrôles dans l'étiquette d'étendue.

<span id="txt"> 
    <asp:TextBox ID="txt" runat="server"></asp:TextBox> 
</span> 

Que vous pouvez sélectionner votre élément comme ceci dans jQuery.

$('#txt > input').val('Hello world'); 

Mais ma façon est, sélectionnez l'élément avec des extrémités avec sélecteur.

$('input[id$="txt"]').val('Hello world'); 

Fonctionne pour mes cas. J'espère aider.