数据网格中的超链接控件调用javascript

Asp Hyperlink control in datagrid call javascript

本文关键字:控件 调用 javascript 超链接 数据网 网格 数据      更新时间:2023-09-26

我有一个javascript打开页面弹出。现在我需要在数据网格上调用它,所以我添加了asp超链接控件。我在网上搜索并找到了这个例子,但我得到了"服务器标签格式不佳"。我花了很多时间,却不知道如何纠正我的代码。谁能给我指一下。提前谢谢。

我在aspx页面上的代码

<asp:TemplateColumn headertext="Date Received" HeaderStyle-Width="11%" Itemstyle-wrap="False" Visible="true">
    <ItemTemplate>
        <asp:HyperLink ID="hyTranscript" runat="server" NavigateUrl="#" onclick="javascript:openWin('~/popAddEditReasons.aspx?page=Edit&ID=" & Eval("ID") &"','EditTransfer','width=650,height=325'); return false;")>
            <%#DataBinder.Eval(Container.DataItem, "Received_Date", "{0:d MMM yyyy}").ToUpper%>
        </asp:HyperLink>
    </ItemTemplate>
</asp:TemplateColumn>

如果您不需要服务器端事件,最简单的方法是使用html标签而不是ASP。网络超链接。

下面的代码基本上调用一个外部javascript函数来打开一个窗口。这比在onclick中创建链接要干净得多。
<asp:HyperLink ID="hyTranscript" runat="server" NavigateUrl="#" 
   onclick='<%# string.Format("openWindow('"{0}'");", Eval("ID")) %>'>
    <%# Eval("Received_Date", "{0:d MMM yyyy}").ToUpper() %>
</asp:HyperLink>
<!-- I prefer this a tag -->
<a onclick='openWindow("<%# Eval("ID") %>")' href="#">
   <%# Eval("Received_Date", "{0:d MMM yyyy}").ToUpper() %>
</a>
<script type="text/javascript">
    function openWindow(id) {
        // Note: you cannot use ~/ at client side.
        var url = "/popAddEditReasons.aspx?page=Edit&ID=" + id;
        window.open(url, "EditTransfer", "width=650,height=325");
    }
</script>

首先,使用锚标记。服务器控件不是您要找的。您正在尝试将onclick服务器端事件设置为客户端函数。这是错误的。除非您想在服务器端访问这个控件,否则请坚持使用锚标记。

也就是说,onclick事件太复杂了,无法包含在标记中。您应该有一个受保护的函数来回退您正在寻找的文本。像这样。

protected string GetLink(string id)
{
    return "javascript:openWin('~/popAddEditReasons.aspx?page=Edit&ID=" + id + "','EditTransfer','width=650,height=325'); return false;";
}

然后更新标记如下:

<a href="#" onclick='<% GetLink(Eval("ID")); %>'>
            <%#DataBinder.Eval(Container.DataItem, "Received_Date", "{0:d MMM yyyy}").ToUpper() %>
        </a>

这还没有经过测试,但它应该为您指明了正确的方向。