2010-09-30 7 views
8

meine Link-Button -wie JavaScript-Funktion mit OnClientClick-Ereignis mit Eval zu binden?

<asp:LinkButton runat="server" ID="lbtnEdit" Text="edit" OnClientClick="javascript:msgDisp('<%# Eval(LocationId).toString() %>')" /> 

und die Javascript-msgDisp ist-

<script type="text/javascript" language="javascript"> 
    function msgDisp(lid) {    
     alert(lid); 
    } 
</script> 

aber es ist giiving LocationID nicht in Pop, sondern die ganze Zeichenfolge <% # ......%> kommt in Popup-Nachricht. Wie kann ich Eval-Werte in Javascript übergeben.

+0

Ist die Verknüpfungsschaltfläche in einem datengebundenen Steuerelement? Wenn nicht, müssen Sie 'lbtnEdit.DataBind()' aufrufen. –

Antwort

12

Sie können den gesamten Inhalt von OnClientClick als Zeichenfolge innerhalb der Code-Klammern erstellen und es wird ausgegeben, wie Sie erwarten.

<asp:LinkButton runat="server" ID="lbtnEdit" Text="edit" 
    OnClientClick='<%# "msgDisp(" + Eval("LocationId") + ");" %>' /> 

Diese LocationID wird unter der Annahme, ist eine gültige Nummer- gibt es keine Anführungszeichen Ihren Wert wickeln, wenn es macht, so etwas wie die Ausgabe msgDisp(hello); brechen wird. Ich weiß nicht, wie ich das auf diese Weise angehen soll. Wenn Sie das tun müssen, würde ich empfehlen, die OnClientClick Serverseite während des ItemDataBound Ereignisses zu setzen. Hier ist, was es möchte, wo der Elternteil eine Kontrolle ist.

protected void notesRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    MyClass item = (MyClass)e.Item.DataItem; 
    LinkButton lbtnEdit = (LinkButton)e.Item.FindControl("lbtnEdit"); 
    lbtnEdit.OnClientClick = string.Format("msgDisp('{0}');", item.LocationId); 
} 
+0

Wenn Sie Anführungszeichen wie in 'msgDisp ('Hallo') möchten, dann können Sie die HTML-Entität wie folgt verwenden:' OnClientClick = '<% # "msgDisp ('" + Eval ("LocationId") + "') " %> ''. –

2

Wenn Sie Ihren Bindungsausdruck Tags (<% # ...%>) im Markup gerendert bekommen, es bedeutet, dass Ihr Linkbutton nicht in einem verbindlichen Container initialisiert wird. Ein bindender Container kann, wie @lincolnk gezeigt hat, ein Repeater- oder GridView-Element, eine Kalenderzelle usw. sein. Außerdem muss der Funktionsaufruf nicht mit "javascript:" vorangestellt werden. Der Wert der OnClientClick-Eigenschaft wird als Ereignishandler des Ereignisses onclick des Ankers gerendert.

2

Sah überall im Netz. Jeder sagt CodeBehind verwenden. Siehe meine Lösung, die auch funktioniert, wenn mein Datenwert ein einziges Zitat darin hat wie O'Neal. Dies funktioniert nicht, wenn Ihr Datenelement doublequotes enthält. Aber arbeitet für das, was ich es tun musste, was im Namen einer Person passierte. Beachten Sie die Backslashes innerhalb des Warnungsaufrufs.

OnClientClick="<%#string.Format(&quot;alert(\&quot;{0}\&quot;); return false; &quot;, Eval(&quot;NAME&quot;))%>"** 
0

Ich möchte Lincolnk für seine Antwort danken. Ich bin gerade dabei, ein neues soziales Netzwerk für googam.com aufzubauen. Ich habe nach ein paar Tagen gesucht, um eine Lösung zu finden, um das Profil eines Benutzers in einem Datenlisten-Popup in einem jquery modalen Dialog anzuzeigen. Durch das Setzen der Verknüpfungsschaltfläche OnClientClick im ItemDataBound-Ereignis wurde das Problem gelöst, dass die Benutzer-ID an die JQuery-Funktion übergeben wurde, um ein Acsx-Benutzersteuerelement im Popup-Fenster zu öffnen.

jQuery(document).ready(function() { 
     var mydiv = jQuery("#mydialog").dialog({ 
      autoOpen: false, 
      resizable: false, 
      modal: true, 
      width: '500', 
      height: '400' 
     }).css("font-size", "0.8em"); 
    }); 

    function ShowPopup(uid) { 
     var mydiv = jQuery("#mydialog") 
     //alert(uid) 
     // Load the content using AJAX 
     mydiv.load('Profile.aspx?id=' + uid); 
     // Open the dialog   
     mydiv.dialog('open'); 
    } 

//////////////

Protected Sub DataList1_ItemDataBound(ByVal sender As Object, ByVal e As DataListItemEventArgs) 
    If e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then 
     Dim imageControl = TryCast(e.Item.FindControl("Image1"), Image) 
     Dim Uid As String = imageControl.ImageUrl 

     Dim ProfileBtn As LinkButton = TryCast(e.Item.FindControl("ProfileButton"), LinkButton) 
     ProfileBtn.OnClientClick = String.Format("ShowPopup('{0}');return false;", Uid) 

    End If 
End Sub 
1

Sie können wie tun OnClick =‘<% # "msgDisp (" + Eval ("LocationID") + ");" %> '