从GridView TemplateField调用Javascript

时间:2012-03-09 09:34:07

标签: c# javascript asp.net

我有一个GridView,我编码如下

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

我遇到运行时错误,表示我的按钮控件格式正确 我想以下

的问题
OnClientClick="javascript:SearchReqsult(<%#Eval("Id") %>);"

有什么想法吗?

9 个答案:

答案 0 :(得分:2)

尝试以下代码

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);");
    } 
 }

答案 1 :(得分:1)

你不能这样做是数据绑定。也许是这样的:

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") + ");";
               }
            };
}

答案 2 :(得分:1)

尝试用单引号括起javascript函数调用:

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

问题可能是缺少/错误引用。

答案 3 :(得分:1)

  

尝试使用String.Format类

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

答案 4 :(得分:1)

将您的'id'字段用单引号括起来。

只需替换

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

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

您的代码将以

开头
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') + ");";
           }
        };
}

答案 5 :(得分:1)

这是你需要做的事情

背后的代码:

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" /> 

答案 6 :(得分:0)

将Labe l和Id绑定在其中并使其显示为false。

在GridView RowDatabound事件上添加attrinute来控制和分配按钮onclientclick事件上的javascript

答案 7 :(得分:0)

尝试使用单引号而不是double和string.Format()

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

答案 8 :(得分:0)

从模板字段调用javascript函数

<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>