2010-11-30 38 views
0

Je veux passer la variable de liaison C# à la fonction javascript. Voici mon code:Comment passer la variable de liaison csharp à la fonction Javascript

<asp:LinkButton ID="lbID" runat="server" Text="<%#Text%>" OnClientClick="passAccessory('<%#Bind(variable)%>'); "></asp:LinkButton> 

Mais cela génère toujours une erreur: "htmlfile: Non implémenté".

Et le code n'intepreted onclick="passAccessory('&lt;%#Bind(variable)%>');"

Est-ce que quelqu'un sait comment le résoudre?

Merci.

Edit: J'ai changé le code pour

<asp:LinkButton ID="lbID" runat="server" Text="<%#Text%>" OnClientClick="passAccessory('<%# Eval("lblTest.ClientID") %>');"></asp:LinkButton> 

Et c'est le code, il est lié à, il utilise le lblTest.ClientID

<asp:Label ID="lblTest" runat="server" Text='<%#Bind("reference")%>' />

Mais je reçu une erreur: HttpException. Databinding ... does not contain a property with the name lblTest . Y a-t-il un problème avec mon code?

Edit: Ces messages me ont donné un indice.

http://www.west-wind.com/Weblog/posts/5364.aspx

I am trying to learn how to bind an IEnumerable LINQ collection to a repeater

Maintenant, je l'ai voulez utiliser

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

Répondre

2

Je ne l'ai pas ASP.NET WebForms pour le temps long, mais je crois qu'il devrait être comme ceci:

OnClientClick="<%# string.Format("passAccessory('{0}');", Container.DataItem("variable")) %>"

+0

Il génère une erreur: 'CS0103: Le nom « Bind »n'existe pas dans la context' actuelle –

+0

j'ai mis à jour ma réponse, peut-être que cela fonctionne. Il y a environ 1,5 ans depuis l'utilisation de formulaires Web. – Gidon

+0

Bien que votre réponse soit correcte, ce type de syntaxe peut être appliqué lorsqu'il se trouve dans un contrôle lié aux données tel que GridView, Repeater ou ListView. On dirait que l'OP n'a pas son LinkButton à l'intérieur d'un tel contrôle, ou le fait-il? : S –

5

Vous ne voulez pas une liaison à deux voies, mais plutôt un Eval.

<asp:LinkButton ID="lbID" runat="server" Text="<%#Text%>" OnClientClick='passAccessory(\"<%# Eval("variable") %>\");'></asp:LinkButton> 
+0

Merci, j'ai essayé ''); ">' et j'ai reçu une autre erreur qui est "HttpException. .. ne contient pas de propriété portant le nom lblTest " –

+0

Cela signifie à peu près exactement ce que cela dit :-) Tout ce que vous avez besoin de lier des données n'a pas de lblTest.ClientID. Quelle est exactement la source de données? – einaros

+0

J'utilise linqtoentities pour obtenir les données et remplir gridview avec des données. –

2

Vous pouvez le faire facilement en modifiant l'événement OnClientClick de Code-Behind.

lbID.OnClientClick = "passAccessory(' " + variable + "')"; 
+0

vous auriez à le faire dans l'événement 'DataBound', sinon vous n'aurez pas accès à' lbID' –

+0

Pourquoi n'aurais-je pas accès au LinkButton? Selon mes connaissances, il ne doit pas nécessairement être dans un événement DataBound. :) La seule autre exigence qui m'empêcherait d'y accéder serait de ne pas placer le lbID dans une étiquette de formulaire avec l'attribut runat défini sur "server". Cependant, la page ne serait pas compilée dans ce cas. –