代码之家  ›  专栏  ›  技术社区  ›  Julius A

将HyperLinkField设置为Javascript Url

  •  5
  • Julius A  · 技术社区  · 15 年前

    我正在使用以下代码片段

     <asp:GridView>
         <asp:HyperLinkField
             DataTextField="SomeColumn" HeaderText="Some Column Text"
             SortExpression="SomeColumn"
             HeaderStyle-HorizontalAlign="Left"
             DataNavigateUrlFormatString="javascript:LaunchSomePopupdialog({0})"
             DataNavigateUrlFields="Id"
             ItemStyle-Font-Underline="true" />  
     </asp:GridView>  
    

    但是,当我使用页面url时,它是有效的,例如:

    DataNavigateUrlFormatString="~/SomeOtherPage.aspx?Id={0}"
    

    有没有一种方法可以让我的JavaScript函数发挥作用?

    2 回复  |  直到 13 年前
        1
  •  7
  •   palota Tommy    9 年前

    我认为您必须将其更改为模板字段中的普通标记,而不使用asp:hyperlinkfield. 然后你可以这样做:

    <asp:TemplateField HeaderText="Some Column Text" ItemStyle-Font-Underline="true">
        <ItemTemplate>
    <a href="#" onclick="javascript:LaunchYourStuff('<%#Eval("YourColumnID")%>')"><%#Eval("YourColumnDisplayText")%></a>
         </ItemTemplate>
    </asp:TemplateField>
    

    不能将javascript放在hyperlinkfield中,如下所示 by design

        2
  •  1
  •   Bolo    10 年前

    也可以使用绑定字段,然后更改RowDataBound事件中的文本(这将允许启用排序和分页回调):

    <asp:BoundField DataField="ID" HtmlEncode="False" />
    

    确保HtmlEncode为false!

    Protected Sub gv_RowDatabound(sender As Object, e As GridViewRowEventArgs) Handles gv.RowDataBound
        If e.Row.RowType <> DataControlRowType.DataRow Then
            Return
        End If
        Dim drv = TryCast(e.Row.DataItem, DataRowView)
        If drv Is Nothing Then
            Throw New Exception("drv is nothing")
        End If
        Const detailsCol As Integer = 4
        e.Row.Cells(detailsCol).Text = String.Format("<a href='javascript:popUp(""Details.aspx?ID={0}"");'>Details</a>", drv("ID"))
    End Sub
    
    推荐文章