2012-03-09 77 views
2

我有一个GridView,我已经编写像下面调用JavaScript从GridView控件的TemplateField

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

任何想法?

+0

尝试使用此的OnClientClick = “JavaScript的:SearchReqsult('<%#的eval(” ID “)%>');” – Jigs 2012-03-09 09:51:17

+0

我用它...没有运气 – Roshe 2012-03-09 09:58:56

回答

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

ID是与按钮绑定的字段。 – Pankaj 2012-03-09 10:34:08

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

我使用__doPostBack在javascript:SearchReqsult中更新面板回发。但Request.Params。当我点击按钮时,Get(“__ EVENTARGUMENT”)总是为空。该ID不会通过代码 – Roshe 2012-03-09 10:10:37

0

把Labe l和绑定Id,并使其可见为false。

在GridView的RowDataBound事件添加attrinute控制和按钮指定的JavaScript的OnClientClick事件

1

尝试封闭在单引号JavaScript函数调用:

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

也许问题是缺少/错误报价。

+0

这是不正确渲染onclick事件。请检查您的页面的查看来源。 – Pankaj 2012-03-09 11:13:29

1

用的String.Format类尝试

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

尝试用单引号代替双和的String.format()

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

这不正确地呈现onclick事件。请检查您网页中的查看来源。 – Pankaj 2012-03-09 11:11:59

+0

我已经更新了代码。这应该工作。请删除retun false;如果你不需要。 – PraveenVenu 2012-03-09 11:25:45

+0

还有一个格式问题。在您的<%# – Pankaj 2012-03-09 11:35:07

1

附上你的'id'f在单引号中。

只需更换

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

之前,{0}和单引号不需要单引号我们可以直接将您的上述代码移至HTML端。 – Pankaj 2012-03-09 14:19:47

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

将“productId”列名更改为您的列名“id”。这是一个工作代码示例。 – Kaf 2012-03-09 11:59:00

+0

您的延迟加载在这种情况下是错误的。 'DataRowView'不能为空。相反,你可以检查'((DataRowView)e.Row.DataItem)[“Id”]为空值。 – Pankaj 2012-03-09 14:16:25

+0

为什么你应该为后面的代码去做这样一个小任务?只需要在按钮点击时调用客户端功能。所以没有必要浪费执行代码的时间以及... – Pankaj 2012-03-09 14:18:11

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> 

相关问题