ASP.Net:将客户端onClick添加到GridView中的HyperlinkField

时间:2010-05-30 10:31:53

标签: asp.net gridview c#-3.0

我有一个包含“合作伙伴名称”字段的现有GridView。可以按合作伙伴名称进行排序 现在我需要更改合作伙伴名称字段,并在某些情况下使其可点击并提醒()某些内容。

现有代码是:

  <asp:GridView ID="gridViewAdjustments" runat="server" AutoGenerateColumns="false" AllowSorting="True" OnSorting="gridView_Sorting" OnRowDataBound="OnRowDataBoundAdjustments" EnableViewState="true">
         <asp:BoundField DataField="PartnerName" HeaderText="Name" SortExpression="PartnerName"/>

我添加了专栏:

<asp:hyperlinkfield  datatextfield="PartnerName" SortExpression="PartnerName" headertext="Name" ItemStyle-CssClass="text2"/>

这使我能够控制CSS和排序。但是,我找不到如何添加客户端javascript函数   我发现添加:

    <asp:TemplateField HeaderText="Edit">                                     
<ItemTemplate>
      <a id="lnk" runat="server">Edit</a>      

允许我通过id访问“lnk”并添加到其属性。但是,我失去了排序能力。

在这种情况下,正确的解决方案是什么? 感谢。

4 个答案:

答案 0 :(得分:7)

我找到的解决方案是以这种方式使用asp:TemplateField,而不会丢失排序功能并使用Eval使用datatextfield:

 <asp:TemplateField HeaderText="Name" SortExpression="PartnerName">
<ItemTemplate>
        <a onclick="javascript:alert('ok')" href="http://<%#Eval("PartnerName")%>"><%#Eval("PartnerName")%></a>
</ItemTemplate></asp:TemplateField>

答案 1 :(得分:5)

处理RowDataBound事件。在事件处理程序中......

private void CustomersGridView_RowDataBound(Object sender, GridViewRowEventArgs e)
{
   e.Row.Cells[0].Controls[0].Attributes.Add("onclick", "alert(‘An alert’);")
}

您可能需要将Controls[0]更改为Controls[1]

答案 2 :(得分:3)

生成的ClientId看起来与ID完全不同,但它始终以ID结尾。我们不能在Javascript或Jquery中使用ID,所以我们可以这样做:

 <asp:TemplateField  SortExpression="partnername" HeaderText="Partner">
    <ItemTemplate>
      <asp:HyperLink ID="kkx" Text='<%#Eval("partnername")%>'  NavigateUrl="# runat="server">
      </asp:HyperLink>
    </ItemTemplate>
    </asp:TemplateField>

然后在Jquery中我们可以做到:

$(function() {
         $("#GridView1 a[id$=kkx]").bind('click', function() {
             alert('hi');
          });
      });

答案 3 :(得分:0)

jQuery的。简单的单行和unobtrusive

$('A.text2').click(function() {
    alert('ok');
});