2009-04-22 8 views
2

Je suis en train de faire ce travail, mais sans succès:javascript à la propriété OnClientClick d'un lien tout en se liant un répéteur

<asp:Repeater ID="Repeater1" runat="server" OnItemCommand="btnDeleteFamily_Click"> 
<HeaderTemplate> 
    <table> 
     <tr> 
      <th width="90" valign="top"><%=getTag("name")%></th> 
     </tr> 
</HeaderTemplate> 
<ItemTemplate> 
     <tr> 
     <td><%#Eval("chrname")%></td> 
      <asp:LinkButton ID="btnDeleteFamily" CssClass="fRight ui-icon ui-icon-trash" runat="server" CommandName="delete" CommandArgument='<%#Eval("idmember")%>' OnClientClick='return confirm("<%= getTag("deletefamilymemberdialog") %>")' Text="" ValidationGroup="delete_family" /> 
     </td> 
     </tr> 
    </ItemTemplate> 
    <FooterTemplate> 
    </table> 
    </FooterTemplate> 
</asp:Repeater> 

En cliquant sur le btnDeleteFamily OnClientClick la boîte de dialogue de confirmation non représenté. GetTag (méthode dans le code derrière) est utilisé pour la localisation pour obtenir le texte en fonction de la langue.

Mon intention est de montrer ce message dans la boîte de dialogue JavaScript, mais je deviens:

<a href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$rptFamily$ctl01$btnDeleteFamily','')" class="fRight ui-icon ui-icon-trash" id="ctl00_ContentPlaceHolder1_rptFamily_ctl01_btnDeleteFamily" onclick='return confirm("<%= getTag("deletefamilymemberdialog") %>");'/> 

Il n'est pas le traitement getTag du côté serveur sinon je recevrais

onclick='return confirm("Are you sure that you want to delete this entry?");' 

Merci

Répondre

1

Je pense écrire le message à la page comme une variable javascript est une meilleure solution:

<script> 
    var deleteMemberDialogMessage = '<%= getTag("deletefamilymemberdialog") %>'; 
</script> 

Et votre répéteur:

<asp:LinkButton ID="btnDeleteFamily" CssClass="fRight ui-icon ui-icon-trash" 
    runat="server" CommandName="delete" CommandArgument='<%#Eval("idmember")%>' 
    OnClientClick='return confirm(deleteMemberDialogMessage)' Text="" 
    ValidationGroup="delete_family" /> 

D'ailleurs assurez-vous que votre message deletefamilymemberdialog ne avoir une seule citation.

EDIT: Si vous voulez lier une valeur de votre source de données à votre répéteur, vous devez lier votre colonne pour contrôler au lieu de Response.Write (<% =) comme ça:

<asp:LinkButton ID="btnDeleteFamily" CssClass="fRight ui-icon ui-icon-trash" 
runat="server" CommandName="delete" CommandArgument='<%#Eval("idmember")%>' 
OnClientClick='<%# Bind("return confirm('{0}');'", "YourColumnName") %> Text="" 
ValidationGroup="delete_family" /> 
+0

Et si vous deviez passer une valeur à partir du répéteur, en utilisant Eval()? Comment feriez-vous cela? –

+0

Je suggère ceci à votre solution, il semble que vous montriez un message statique. – Canavar

+0

Oui, je suis d'accord, mais que faire si le message dépend d'une certaine valeur dans le répéteur. Je me demandais ... –

0

Cela semble aller, au moins pour moi.

Vous pouvez l'essayer dans firefox, et en utilisant la barre d'outils WebDeveloper ou les extensions Firebug vous pourrez obtenir plus d'informations sur ce qui se passe derrière la scène.

Il se peut qu'il y ait d'autres erreurs sur la page qui empêchent ce code de fonctionner.

+0

Salut Ekeko, Ce n'est pas correct, comme dans le navigateur j'obtiens onclick = 'return confirm ("<% = getTag (" deletefamilymemberdialog ")%>");' et je devrais obtenir quelque chose comme onclick = 'return confirm ("Êtes-vous sûr que vous voulez supprimer cette entrée?");' –

1
protected void Repeater_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    LinkButton lb = e.Item.FindControl("btnDelete") as LinkButton; 
    if (lb != mull) { 
     lb.OnClientClick = "whatever"; 
    } 
} 
0

Si vous souhaitez utiliser la boîte de dialogue jQuery en mode de confirmation pour lier aux boutons de liaison d'un répéteur dans un panneau de mise à jour ET que le code que vous souhaitez exécuter après confirmation est différent pour chaque ligne:

Ajouter une fonction javascript à votre page/contrôle comme ceci:

function confirm(buttonFunctionForPostBack) 
{ 
    $("#dialog").dialog('option', 'buttons', { 
       "Cancel": function() { 
        $(this).dialog("close"); 
       }, 
       "Delete Payment": function() { 
        eval(buttonFunctionForPostBack); 
        $(this).dialog("close"); 
        } 
       } 
    ).dialog('open'); 
} 

Et dans votre code derrière:

public void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    LinkButton lb = e.Item.FindControl("deleteButton") as LinkButton; 
    if (lb != null) 
    { 
     lb.OnClientClick = "confirm(\"" + this.Page.ClientScript.GetPostBackEventReference(lb, string.Empty) + "\");return false;"; 
    } 
} 

Et dans votre page ASPX:

<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound"> 
    <HeaderTemplate> 
    <table> 
     <tr> 
      <th width="90" valign="top"></th> 
     </tr> 
</HeaderTemplate> 
<ItemTemplate> 
     <tr> 
     <td><%#Eval("name")%></td> 
     <td><asp:LinkButton ID="deleteButton" runat="server" CommandName="delete" CommandArgument='<%#Eval("id")%>' Text="Delete" /> 
     </td> 
     </tr> 
    </ItemTemplate> 
    <FooterTemplate> 
    </table> 
    </FooterTemplate> 
</asp:Repeater> 

Cela vous permet de prendre avantage du fait que vous pouvez définir l'option 'boutons' de la boîte de dialogue après la création de la boîte de dialogue. En outre, il ne nécessite aucune variable de script supplémentaire.

Questions connexes