2009-11-30 8 views
0

J'ai un GridView qui affiche une liste d'utilisateurs. Chaque utilisateur a un prénom, un nom de famille et d'autres données que vous attendez d'un utilisateur. Chaque valeur est exposée via BoundField. Par exemple, le prénom est disponible via "Prénom", le nom de famille est disponible par "Nom".ASP.NET + DataBinder.Eval avec plusieurs champs liés

Lorsqu'un utilisateur clique sur un LinkButton que j'ai dans un TemplateField, j'ai besoin d'exécuter du JavaScript. Cette fonction JavaScript requiert à la fois le prénom et le nom. À l'heure actuelle, je suis en train quelque chose comme ceci:

<asp:LinkButton ID="lbPrompt" runat="server" Text="prompt" CommandName="Prompt" 
    CommandArgument='<%# Eval("UserName") %>' 
    OnClientClick='<%# Eval("FirstName", "LastName", "return askUser(\"{0}\",\"{1}\");") %>' /> 

Cette déclaration ne fonctionne pas parce que la méthode Eval n'accepte pas ce genre de surcharge. Comment puis-je accomplir cette tâche?

Merci

Répondre

7
<%# String.Format(
     "return askUser(\"{0}\",\"{1}\")", 
     Eval("FirstName"), 
     Eval("LastName")) %> 
0

Essayez

OnClientClick='<%# "return askUser(\"" + Eval("FirstName") + "\",\"" + Eval("LastName") + "\");" %>' 

(non testé)

0

Si vous utilisez le code derrière, vous pouvez l'avoir en événement suivant.

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     LinkButton lb = e.Row.FindControl("lbPrompt") as LinkButton; 
     if (lb != null) 
     { 
      string firstName = Convert.ToString(DataBinder.Eval(DataBinder.GetDataItem(e.Row), "FirstName")); 
      string lastName = Convert.ToString(DataBinder.Eval(DataBinder.GetDataItem(e.Row), "LastName")); 

      lb.Attributes.Add("OnClick", "javascript:return askUser(" + firstName + ", " + lastName + ")"); 
     } 
    } 
Questions connexes