2012-03-09 3 views
2

J'ai un GridView, j'ai codé comme ci-dessousAppel Javascript de GridView TemplateField

<asp:TemplateField HeaderText="Item"> 
<ItemTemplate>            
    <asp:Button ID="btnItem" OnClientClick="javascript:SearchReqsult(<%#Eval("Id") %>);" 
CssClass="Save" runat="server" /> 
</ItemTemplate> 
</asp:TemplateField> 

je fais face à une erreur de temps d'exécution qui dit que mon contrôle bouton est correctement formaté Je suppose que le problème avec la

suivante
OnClientClick="javascript:SearchReqsult(<%#Eval("Id") %>);" 

Une idée?

+0

essayer d'utiliser ce OnClientClick = "javascript: SearchReqsult ('<% # Eval (" Id ")%> ');" – Jigs

+0

Je l'ai utilisé ... Pas de chance – Roshe

Répondre

2

Essayez le code suivant

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     Button btn = (Button)e.Row.FindControl("btnItem"); 
     btn.Attributes.Add("OnClick","SearchReqsult(this.id);"); 
    } 
} 
+0

ID est le champ à lier avec le bouton. – Pankaj

1

Impossible de faire cela est databound. Peut-être quelque chose comme ceci:

protected void Page_Load(object sender, EventArgs e) 
{ 
    yourGridView.RowDataBound += (s, ev) => 
      { 
       if (ev.Row.RowType == DataControlRowType.DataRow) 
       { 
        var btn= (Button) ev.Row.FindControl("btnCheque"); 
        btn.OnClientClick = "javascript:SearchReqsult(" + 
            DataBinder.Eval(ev.Row.DataItem, "Id") + ");"; 
       } 
      }; 
} 
+0

Je fais la mise à jour du panneau de retour en utilisant __doPostBack dans javascript: SearchReqsult. Mais Request.Params.Get ("__ EVENTARGUMENT") est toujours nul lorsque je clique sur le bouton. l'ID ne passe pas le code derrière – Roshe

0

Mettez Labe l et lier Id en cela et le rendre visible faux.

Lors de l'événement GridView RowDataBound ajouter attrinute pour contrôler et affecter javascript sur le bouton OnClientClick événement

1

Essayez enfermant javascript appel de fonction entre guillemets simples:

OnClientClick='javascript:SearchReqsult(<%#Eval("Id") %>);'

Peut-être que le problème est avec des guillemets manquants/faux .

+0

Cela ne rend pas correctement l'événement onclick. S'il vous plaît vérifier votre source de vue de votre page. – Pankaj

1

Essayez avec String.Format Classe

<asp:Button ID="btnCheque" runat="server" 
OnClientClick=<%#String.Format("return SearchReqsult('{0}');", Eval("ID")) %> /> 
0

Essayez avec des guillemets simples au lieu de double et string.Format()

<asp:Button ID="btnCheque" OnClientClick=<%# string.Format("javascript:SearchReqsult('{0}');return false;",Eval("id")) %> CssClass="Save" runat="server" /> 
+0

Cela ne rend pas correctement l'événement onclick. S'il vous plaît vérifier la source Voir dans votre page. – Pankaj

+0

J'ai mis à jour le code. Cela devrait fonctionner. S'il vous plaît supprimer le retun faux; si vous n'en avez pas besoin. – PraveenVenu

+0

Il y a toujours un problème de formatage. Le guillemet simple est manquant autour du {0} et le guillemet simple n'est pas exigé avant votre <% # – Pankaj

1

Entourez votre 'id' f respecter entre guillemets simples.

remplacer juste

btn.OnClientClick = "javascript:SearchReqsult(" + 
           DataBinder.Eval(ev.Row.DataItem, "Id") + ");"; 

avec

btn.OnClientClick = "javascript:SearchReqsult(" + 
           DataBinder.Eval(ev.Row.DataItem, 'Id') + ");"; 

votre code viendra comme

protected void Page_Load(object sender, EventArgs e) 
{ 
yourGridView.RowDataBound += (s, ev) => 
     { 
      if (ev.Row.RowType == DataControlRowType.DataRow) 
      { 
       var btn= (Button) ev.Row.FindControl("btnCheque"); 
       btn.OnClientClick = "javascript:SearchReqsult(" + 
           DataBinder.Eval(ev.Row.DataItem, 'Id') + ");"; 
      } 
     }; 
} 
+0

Nous pouvons directement déplacer votre code mentionné ci-dessus au côté HTML seulement. – Pankaj

1

Voici ce que vous devez faire

CODE DERRIÈRE:

protected void GridView_RowCreated(object sender,GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     if (((DataRowView)e.Row.DataItem) !=null) 
      ((Button)e.Row.FindControl("btnCheque")).Attributes.Add("onclick","SearchReqsult(" + ((DataRowView)e.Row.DataItem)["productId"].ToString() + ")"); 

    } 
} 

HTML:

<asp:Button ID="btnCheque" CssClass="Save" runat="server" Text="My Button" /> 
+0

Modifier le nom de colonne "productId" à votre nom de colonne "id". Ceci est un exemple de code de travail. – Kaf

+0

Votre chargement paresseux est faux dans ce contexte. 'DataRowView' ne peut pas être null. A la place, vous pouvez vérifier' ((DataRowView) e.Row.DataItem) ["Id"] 'pour les valeurs nulles. – Pankaj

+0

Pourquoi devriez-vous opter pour le code derrière pour une si petite tâche? Juste besoin d'appeler la fonction client sur le bouton. Il n'est donc pas nécessaire de perdre du temps dans l'exécution du code ... – Pankaj

0

Appel fonction javascript de champ modèle

<asp:TemplateField HeaderText="Status" ItemStyle-HorizontalAlign="Center"> 
<ItemTemplate> 
    <asp:LinkButton ID="lnkDelete" OnClientClick=<%#String.Format("return dis_status('{0}');", Eval("Status")) %> runat="server" CommandArgument='<%# Eval("AgtId")%>' Text='<%# Eval("Status")%>' CommandName="cmdDelete" /> 
</ItemTemplate> 

Questions connexes