2010-09-30 17 views
8

mon bouton lien -comment lier la fonction javascript avec l'événement OnClientClick avec Eval?

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

et le javascript msgDisp iS

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

mais il n'est pas giiving LocationID pop, mais toute la chaîne <% # ......%> est comin dans un message contextuel. Comment puis-je transmettre des valeurs Eval en javascript.

+0

Le bouton de liaison dans un contrôle de base de données? Sinon, vous devez appeler 'lbtnEdit.DataBind()'. –

Répondre

12

Vous pouvez créer tout le contenu de OnClientClick sous la forme d'une chaîne dans les crochets de code et il sortira comme prévu.

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

Cela suppose LocationID est valide number- il n'y a pas de guillemets pour envelopper votre valeur quand il rend, donc sortir quelque chose comme msgDisp(hello); va se briser. Je ne sais pas comment aborder cela de cette manière, donc si vous devez le faire, je vous recommande de définir le côté serveur OnClientClick pendant l'événement ItemDataBound. Voici ce qu'il aimerait que le parent soit un contrôle Repeater.

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

si vous voulez des guillemets autour comme dans 'msgDisp ('hello');' alors vous pouvez utiliser l'entité HTML comme: 'OnClientClick = '<% #" msgDisp (' "+ Eval (" LocationId ") +" ') " %> ''. –

2

Si vous obtenez vos balises d'expression liaison (<% #% ...>) rendus dans le balisage, cela signifie que votre LinkButton n'est pas initialisé dans un récipient de liaison. Un conteneur de liaison peut être, comme l'a démontré @lincolnk, un élément Repeater ou GridView, une cellule Calendar, etc. De plus, vous n'avez pas besoin de préfixer votre appel de fonction avec "javascript:". La valeur de la propriété OnClientClick est rendue en tant que gestionnaire de l'événement onclick de l'ancre.

2

Regardé partout sur le net. Tout le monde dit utiliser CodeBehind. Voir ma solution, qui fonctionne même si mon datavalue contient une seule citation comme O'Neal. Cela ne fonctionnera pas si votre élément de données contient des doubles quotes. Mais travaille pour ce que j'avais besoin de faire qui était passé au nom d'une personne. Notez les barres obliques inverses dans l'appel d'alerte.

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

Je tiens à remercier lincolnk pour sa réponse. J'aide actuellement à construire un nouveau réseau social pour googam.com. J'ai cherché pendant quelques jours une solution pour voir le profil d'un utilisateur, dans un datalist, dans une fenêtre de dialogue jquery modal. Définir le bouton de lien OnClientClick dans l'événement ItemDataBound a résolu le problème de passer l'ID utilisateur à la fonction JQuery pour ouvrir un contrôle utilisateur acsx dans la fenêtre contextuelle.

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

Vous pouvez faire comme onclick = » <% # "msgDisp (" + Eval ("LocationID") + ");" %> '