我在使用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(<%# Eval("NotificationData") %>);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','')">
所以我的问题是:
答案 0 :(得分:4)
对于OnClientClick
,您可以尝试:
OnClientClick='<%# string.Format("OpenItemMenu(\"{0}\"); return false", Eval("NotificationData")) %>'
如果LinkButton不在数据绑定控件中,则必须调用DataBind
以确保评估数据绑定表达式:
protected void Page_Load(object sender, EventArgs e)
{
ItemMenuBtn.DataBind();
}
默认情况下,点击LinkButton会在__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>