将HyperLinkField设置为Javascript Url

时间:2010-06-18 10:57:01

标签: asp.net .net gridview hyperlink

我遇到一个问题,我在Asp.net GridView中的超链接字段不接受将打开弹出对话框的Javascript函数。

我正在使用以下代码段

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

然而,当我使用页面网址时,它可以工作,例如:

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

有没有办法让我的JavaScript函数能够正常工作?

2 个答案:

答案 0 :(得分:7)

我认为您必须将其更改为模板字段内的普通标记,而不使用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>

所有asp:hyperlinkfield属性都放在templateField标记上。

修改

您无法在超链接字段中放置javascript,因为这是by design

答案 1 :(得分:1)

您还可以使用绑定字段,然后更改RowDataBound事件中的文本。 (这将允许EnableSortingAndPagingCallbacks工作):

<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