2010-11-30 5 views
0

Ich möchte C# Binding Variable an Javascript-Funktion übergeben. Hier ist mein Code:Wie übergeben csharp Binding Variable zu Javascript-Funktion

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

Aber es erzeugt immer einen Fehler: "htmlfile: Nicht implementiert".

und der Code wird nicht interpretiert wird onclick="passAccessory('&lt;%#Bind(variable)%>');"

Hat jemand weiß, wie es zu lösen?

Danke.

Edit: ich den Code zu

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

geändert haben und das ist der Code, um es zu verwandt ist, verwendet es die lblTest.ClientID

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

aber ich erhielt einen Fehler: HttpException. Databinding ... does not contain a property with the name lblTest . Ist mein Code falsch?

Bearbeiten: Diese Beiträge gaben mir einen Hinweis.

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

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

Jetzt habe ich möchte

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

Antwort

2

ich nicht ASP.NET Webforms tun für entlang Zeit haben verwenden, aber ich glaube, dass es so sein sollte:

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

+0

ein Fehler erzeugt: 'CS0103: Der Name‚Bind‘existiert nicht in der aktuellen context' –

+0

ich meine Antwort aktualisiert haben, vielleicht funktioniert dies. Es ist vor etwa 1,5 Jahren seit der Verwendung von Webforms. – Gidon

+0

Während Ihre Antwort richtig ist, kann diese Art von Syntax angewendet werden, wenn sie sich in einem datengebundenen Steuerelement wie GridView, Repeater oder ListView befindet. Sieht so aus, als hätte der OP seinen LinkButton nicht in einem solchen Steuerelement, oder? : S –

5

Sie wollen keine Zwei-Wege-Bindung, sondern eher ein Eval.

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

Danke, habe ich versucht '); ">' und ich erhielt einen weiteren Fehler, der "HttpException. Databinding. .. enthält keine Eigenschaft mit dem Namen lblTest " –

+0

Das bedeutet ziemlich genau, was es sagt :-) Was auch immer du hast, hat keine lblTest.ClientID. Was genau ist die Datenquelle? – einaros

+0

Ich verwende linqtoentities, um die Daten zu erhalten, und fülle gridview mit Daten aus. –

2

Sie können dies leicht tun, indem Sie das OnClientClick-Ereignis von Code-Behind ändern.

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

müssten Sie es innerhalb des 'DataBound'-Ereignisses tun, sonst haben Sie keinen Zugriff auf' lbID' –

+0

Warum hätte ich keinen Zugriff auf den LinkButton? Nach meinem Wissen muss es nicht innerhalb eines DataBound-Ereignisses sein. :) Die einzige weitere Anforderung, die mich daran hindern würde, darauf zuzugreifen, wäre, die lbID nicht in ein Formular-Tag zu setzen, bei dem das runat-Attribut auf "server" gesetzt ist. Allerdings würde die Seite in diesem Fall nicht kompiliert werden. –