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

时间:2013-06-11 17:16:26

标签: javascript asp.net

我有一个javascript打开页面弹出窗口。现在我需要在datagrid上调用它,所以我添加了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>

2 个答案:

答案 0 :(得分:2)

如果您不需要服务器端事件,最简单的方法是使用html a标记而不是ASP.Net HyperLink。

以下代码基本上调用外部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>

答案 1 :(得分:0)

首先,只需前往并使用锚标记即可。服务器控件不是您正在寻找的。您正在尝试将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>

这尚未经过测试,但它应该指向正确的方向。