4 Stimmen

ASP.Net: Hinzufügen von clientseitigem onClick zu einem HyperlinkFeld in GridView

Ich habe eine bestehende GridView, die das Feld "Partnername" enthält. Es ist nach Partnernamen sortierbar.
Jetzt muss ich das Feld "Partnername" ändern und in einer Bedingung anklickbar machen und etwas melden().

Der bestehende Code lautet:

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

Ich habe die Spalte hinzugefügt:

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

die es mir ermöglicht, das CSS und die Sortierung zu kontrollieren. Allerdings kann ich nicht finden, wie man eine clientseitige Javascript-Funktion hinzufügen, um es.
Ich habe festgestellt, dass das Hinzufügen von :

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

ermöglichen es mir, auf "lnk" über die ID zuzugreifen und seine Attribute zu ergänzen. Allerdings verliere ich die Fähigkeit zu sortieren.

Was ist die richtige Lösung für diesen Fall?
Gracias.

9voto

Nir Punkte 3823

Die Lösung, die ich gefunden habe, war die Verwendung von asp:TemplateField auf diese Weise, ohne die Sortierfunktion zu verlieren, und die Verwendung des Datentextfelds mit Eval:

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

6voto

David Neale Punkte 15770

Behandeln Sie die RowDataBound Veranstaltung. Im Ereignishandler...

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

Sie müssen möglicherweise Folgendes ändern Controls[0] a Controls[1] .

0 Stimmen

Der Fehler bei der Definition einer ID lautet: "Id-Attribut ist ungültig für Tags, die nicht von Control geerbt werden".

0 Stimmen

Danke - aber trotzdem kann man dem asp:hyperlinkfield keine ID geben... Aber ich verstehe, was Sie meinen.

0 Stimmen

Ja, ich habe vergessen, diesen Teil zu entfernen.

3voto

josephj1989 Punkte 9171

Die erzeugte ClientId sieht ganz anders aus als ID, endet aber immer mit ID. Wir können ID nicht in Javascript oder Jquery verwenden, also können wir wie unten tun:

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

Dann in Jquery können wir tun:

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

0voto

Mark Brackett Punkte 83046

JQuery. Einfache Einzeiler und unauffällig :

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X