如何使用Eval绑定OnClientClick事件的JavaScript函数?

8

我的链接按钮 -

<asp:LinkButton runat="server" ID="lbtnEdit" Text="edit" OnClientClick="javascript:msgDisp('<%# Eval(LocationId).toString() %>')" />

并且 JavaScript 的 msgDisp 是-

<script type="text/javascript" language="javascript">
    function msgDisp(lid) {            
        alert(lid);
    }
</script>

但是弹出窗口中并没有给出LocationId,而是整个字符串<%......%>出现在弹出消息中。我该如何在Javascript中传递Eval值?

链接按钮是否在数据绑定控件中?如果不是,则需要调用lbtnEdit.DataBind() - Justin M. Keyes
5个回答

13
你可以在代码括号中构建整个OnClientClick的内容的字符串,这样它将会按照你的期望输出。
<asp:LinkButton runat="server" ID="lbtnEdit" Text="edit" 
    OnClientClick='<%# "msgDisp(" + Eval("LocationId") + ");" %>' /> 

假设LocationId是一个有效的数字——当它被呈现时,没有引号来包装您的值,所以输出类似于msgDisp(hello);这样的内容会出错。我不知道如何以这种方式解决这个问题,所以如果你必须这样做,我建议在ItemDataBound事件期间在服务器端设置OnClientClick。下面是在父控件是Repeater控件的情况下的示例:

protected void notesRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    MyClass item = (MyClass)e.Item.DataItem;
    LinkButton lbtnEdit = (LinkButton)e.Item.FindControl("lbtnEdit");
    lbtnEdit.OnClientClick = string.Format("msgDisp('{0}');", item.LocationId);
}

如果你想在像 msgDisp('hello'); 这样的内容周围加上引号,那么你可以使用 HTML 实体,如:`OnClientClick='<%# "msgDisp('" + Eval("LocationId") + "');" %>'。 - Shawn Kovac

2

在网上搜索了很多地方,每个人都说要使用CodeBehind。 看看我的解决方案,即使我的数据值中有一个单引号,比如O'Neal,它也能正常工作。 如果您的数据项包含双引号,则此方法将无法正常工作。但这对我需要的传递一个人的名字来说已经足够了。 请注意警告调用内部的反斜杠。

OnClientClick="<%#string.Format(&quot;alert(\&quot;{0}\&quot;); return false; &quot;, Eval(&quot;NAME&quot;))%>"**

2

如果你在标记中看到绑定表达式标签(<%# ... %>),那么说明你的LinkButton没有在绑定容器中初始化。绑定容器可以是像@lincolnk演示的Repeater或GridView项、日历单元格等。此外,你不必在函数调用前加上"javascript:"前缀。OnClientClick属性的值被呈现为锚点的onclick事件处理程序。


1
你可以这样做: OnClick='<%# "msgDisp(" + Eval("LocationId") + ");" %>'

0

我想感谢lincolnk提供的答案。我目前正在帮助建立googam.com的新社交网络。我已经搜索了几天,以找到在jquery模态对话框弹出中查看用户个人资料的解决方案。在ItemDataBound事件中设置linkbutton OnClientClick解决了将用户ID传递给JQuery函数以在弹出窗口中打开acsx用户控件的问题。

    jQuery(document).ready(function () {
        var mydiv = jQuery("#mydialog").dialog({
            autoOpen: false,
            resizable: false,
            modal: true,
            width: '500',
            height: '400'
        }).css("font-size", "0.8em");
    });

    function ShowPopup(uid) {
        var mydiv = jQuery("#mydialog")
        //alert(uid)
        // Load the content using AJAX
        mydiv.load('Profile.aspx?id=' + uid);
        // Open the dialog        
        mydiv.dialog('open');
    }

//////////////

Protected Sub DataList1_ItemDataBound(ByVal sender As Object, ByVal e As DataListItemEventArgs)
    If e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then
        Dim imageControl = TryCast(e.Item.FindControl("Image1"), Image)
        Dim Uid As String = imageControl.ImageUrl

        Dim ProfileBtn As LinkButton = TryCast(e.Item.FindControl("ProfileButton"), LinkButton)
        ProfileBtn.OnClientClick = String.Format("ShowPopup('{0}');return false;", Uid)

    End If
End Sub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接