2010-12-01 4 views
0

Je souhaite attribuer une variable csharp à l'élément de la page ASP à l'aide de javascript. Il semble que l'assignation ne fonctionne pas dans mon code.Comment affecter une variable C# à un élément asp à l'aide de javascript

Ici, il est:

document.getElementById('lbAccessories').innerHTML = '<%#SelectLabel%>'; 

Dans mon code asp i utiliser:

<asp:LinkButton ID="lbAccessories" runat="server" />' 

Je ne peux pas affecter la valeur directement au linkbutton à l'aide Text='<%#SelectLabel%>' parce que je veux le rendre plus intelligent .

Est-ce que quelqu'un sait comment faire avec ça?

Merci

Edit:

Voici mon code, je l'ai essayé d'utiliser <%=lbAccessories.clientId%>, mais il génère une erreur: lbAccessories n'existe pas dans le contexte.

<script type="text/javascript"> 
    function function(Ref) { 
     if ('<%=TextBoxClientID%>' == 'txtLink') 
     { 
      document.getElementById('lbAccessories').innerHTML = '<%#SelectLabel%>'; 
     } 
     else if ('<%=TextBoxClientID%>' == 'btnSearch') { 
      document.getElementById('lbAccessories').innerHTML = '<%#ViewDetail%>'; 
     } 
    } 

</script> 

Edit:

<asp:GridView ID="gv1" AutoGenerateColumns="false" runat="server" 
    AllowPaging="true" OnPageIndexChanging="pic"> 
    <Columns> 
     <asp:TemplateField HeaderText=""> 
      <ItemTemplate> 
       <asp:LinkButton ID="lbAccessories" runat="server" OnClientClick='<%#string.Format("passAccessory(\"{0}\");", Eval("Ref"))%>'></asp:LinkButton> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

Edit:

Merci beaucoup pour tous ceux qui ont posté les suggestions.

J'ai changé le code javascript à ce qui suit:

<script type="text/javascript"> 
    function passAccessory(accessoryRef) { 

     if ('<%=TextBoxClientID%>' == 'txtLink') { 
      document.getElementById('<%= gvAccessories.FindControl("lbAccessories").ClientID %>').innerHTML = '<%#SelectLabel%>'; 
     } 
     else if ('<%=TextBoxClientID%>' == 'btnSearch') { 
      document.getElementById('<%= gvAccessories.FindControl("lbAccessories").ClientID %>').innerHTML = '<%#ViewDetail%>'; 
     } 
    } 
</script> 

dans le fichier *.aspx.cs, j'ai ajouté: protected LinkButton lbAccessories { get; set; }

Il jette une exception:

Object reference not set to an instance of an object

Quelqu'un a des idées? Merci beaucoup

Edit:

Enfin, nous l'avons fait avec le code csharp. C'est plus flexible et gérable. Mon collègue m'a aidé. Merci à tous pour votre aide!!!

+0

Le javascript est en cours d'exécution avant que le bouton de lien a été ajouté au DOM – cspolton

+0

Vous semblez vouloir définir le texte pour le 'LinkButton' lorsque vous cliquez dessus, mais le bouton sera POST revenir à la serveur lorsque cliqué. c'est ce que tu veux? – cspolton

+0

Ceci est un contrôle utilisateur. Les différentes pages incluent le contrôle de l'utilisateur. Mais la vue est un peu différente lorsque différentes pages sont chargées. Donc, je veux utiliser javascript pour juger des conditions différentes et pour afficher un contenu différent dans le 'LinkButton' qui se trouve dans une grille. –

Répondre

2

Vérifiez le code HTML de sortie si l'ID d'une ancre est réellement ce que vous recherchez. Dans tous les cas, préférez utiliser <%= lbAccessories.ClientID %> plutôt que de vous référer à l'ID du serveur du script client.

Si pour une raison quelconque ne voulez pas (ou ne peut pas) utiliser <%= lbAccessories.ClientID %> vérifiez article suivant sur le plugin jQuery qui vous permet d'obtenir l'élément DOM par serveur ID:

http://radek-stromsky.blogspot.com/2010/11/aspnet-how-to-get-client-id-with-jquery.html

EDIT:

J'ai fait plusieurs changements dans votre code:

<script type="text/javascript"> 
    function passAccessory(Ref) { 
     if ('<%= TextBoxClientID %>' == 'txtLink') 
     { 
      document.getElementById('<%= GridView1.FindControl("lbAccessories").ClientID %>').innerHTML = '<%# SelectLabel %>'; 
     } 
     else if ('<%= TextBoxClientID %>' == 'btnSearch') { 
      document.getElementById('<%= GridView1.FindControl("lbAccessories").ClientID %>').innerHTML = '<%#ViewDetail%>'; 
     } 
    } 
</script> 

<asp:LinkButton ID="lbAccessories" runat="server" OnClientClick='<%#string.Format("passAccessory(\"{0}\");", Eval("Ref"))%>'></asp:LinkButton> 

EDIT: EDIT:

J'ai corrigé le code ci-dessus. Maintenant, il y a GridView1.FindControl("lbAccessories")

+0

Pourquoi il génère toujours l'erreur: 'CS0103: le nom 'lbAccessories' n'existe pas dans le contexte actuel'? Je pense que si j'utilise lbAccessories comme votre exemple, je l'ai déclaré dans le code derrière. –

+0

Oui c'est ce que vous devez faire. – cspolton

+0

Si vous définissez le contrôle avec un ID explicite, Visual Studio doit générer un membre avec ce nom dans le fichier * .aspx.designer.cs. Recherchez ce fichier et voyez si "lbAccessories" y est défini. –

2

En supposant SelectLabel est un membre de la chaîne publique ou protégée ou à la propriété de votre page ASP.NET, vous devriez être en mesure de rendre la chaîne en utilisant:

document.getElementById('<%= lbAccessories.ClientID %>').innerHTML = '<%= SelectLabel%>'; 

Y at-il une raison pour laquelle la « intelligence » dont vous avez besoin ne peut pas être côté serveur? Si vous définissez SelectLabel en utilisant C#, vous devriez également pouvoir définir lbAccessories.Text = SelectLabel; de façon dynamique.

+0

Affecte la valeur à element.innerHTML, mais n'apparaît pas dans le bouton link. Est-ce que tu sais pourquoi? –

+0

Voir ma mise à jour, si vous devez utiliser javascript, vous devez afficher le ClientId du LinkButton dans le javascript. – cspolton

+0

Je veux faire un jugement si javascript, la valeur de l'élément change en fonction des conditions. –

1

ajouter un HiddenField avec id = "hid1" et définir sa valeur à la selectlabelvalue, puis:

document.getElementById('lbAccessories').innerHTML 

= document.getElementById('hid1').innerHTML;

JQuery:

$('#lbAccessories).html($('#hid1').html()); 
+0

J'ai essayé d'utiliser hiddenfield, mais ça ne marche pas; –

+0

si vous avez un gabarit ou travaillez dans un contrôle utilisateur, notez que l'id changera, vous devez utiliser UniqueID dans le script client –

1

lbAccessories est un contrôle côté serveur. Lorsque le serveur émet du code HTML, il attribue un identificateur ClientId unique au contrôle. Dans le JavaScript, vous devez y accéder via son ClientId comme ceci:

document.getElementById('<%=lbAccessories.ClientId%>').innerHTML = '<%#SelectLabel%>'; 

Espérons que cela aide.

+0

J'ai essayé mais cela génère une erreur: 'CS0103: Le nom 'lbAccessories' n'existe pas dans le contexte actuel' –

+0

Le ClientId doit être ClientID à la place. Où se trouve votre JavaScript sur la page aspx? – jvanrhyn

+0

Il est situé dans la même page; et il génère la même erreur –

Questions connexes