在OnClientClick

时间:2016-08-24 17:29:52

标签: javascript c# asp.net

我在使用OnClientClick中的数据绑定Eval时遇到问题,我无法找到正确绑定的方法。这是我的代码

<asp:LinkButton runat="server" ID="ItemMenuBtn" CssClass="ui-button ui-widget ui-corner-all" OnClientClick='OpenItemMenu(<%# Eval("NotificationData") %>);return false;'>
    <i class="fa fa-lg fa-bars" aria-hidden="true"></i>
</asp:LinkButton>

我希望输出类似于:

<a onclick="OpenItemMenu({JSON notification data here});return false;" id="some id" class="ui-button ui-widget ui-corner-all">

但相反,我得到了:

<a onclick="OpenItemMenu(&lt;%# Eval(&quot;NotificationData&quot;) %>);return false;" id="ctl00_m_g_28e3d385_2509_4d3a_9c53_1d17b87a802b_gvNoteworthyItems_ctl02_ItemMenuBtn" class="ui-button ui-widget ui-corner-all" href="javascript:__doPostBack('ctl00$m$g_28e3d385_2509_4d3a_9c53_1d17b87a802b$gvNoteworthyItems$ctl02$ItemMenuBtn','')">

所以我的问题是:

  1. 为什么eval似乎根本不起作用?
  2. 为什么客户端上的所有内容都会像这样编码?
  3. 为什么回发被放置在链接的href中?正如您在客户端上看到的那样,单击“我不想要回发”,因为此按钮会打开一个对话框并将数据传递给它。

2 个答案:

答案 0 :(得分:4)

对于OnClientClick,您可以尝试:

OnClientClick='<%# string.Format("OpenItemMenu(\"{0}\"); return false", Eval("NotificationData")) %>'

如果LinkBut​​ton不在数据绑定控件中,则必须调用DataBind以确保评估数据绑定表达式:

protected void Page_Load(object sender, EventArgs e)
{
    ItemMenuBtn.DataBind();
}

默认情况下,点击LinkBut​​ton会在__doPostBack的帮助下触发回发。在false事件处理程序中返回OnClientClick会取消该回发。

答案 1 :(得分:0)

如何使用普通锚<a>标记而不是LinkButton,HTML 5 data属性和一些jQuery:

<head runat="server">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.3/jquery.min.js"></script>
    <script type="text/javascript">
        $(function () {
            $(".notificationLink").click(function () {
                var notification = $(this).data('notification');
                alert(notification + ".Now you can call OpenItemMenu()");
            });
        });
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
            <Columns>
                <asp:BoundField DataField="ID" />
                <asp:TemplateField>
                    <ItemTemplate>
                        <a href="#" class="notificationLink" data-notification='<%# Eval("NotificationData") %>'>Click me...</a>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
    </form>
</body>