0

我有一个 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>
4

2 回答 2

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>
于 2013-06-11T17:29:44.390 回答
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>

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

于 2013-06-11T17:33:19.923 回答