我遇到一个问题,我在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函数能够正常工作?
答案 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