【问题标题】:how to bind javascript function with OnClientClick event with Eval?如何使用 Eval 将 JavaScript 函数与 OnClientClick 事件绑定?
【发布时间】:2010-09-30 10:27:44
【问题描述】:

我的链接按钮 -

<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>

但它不是在 pop 中给出 LocationId,而是整个字符串 出现在弹出消息中。如何在 javascript 中传递 Eval 值。 p>

【问题讨论】:

  • 链接按钮是否在数据绑定控件中?如果没有,您需要致电lbtnEdit.DataBind()

标签: javascript asp.net eval onclientclick


【解决方案1】:

您可以将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');那样在它周围加上引号,那么你可以使用像OnClientClick='&lt;%# "msgDisp(&amp;#39;" + Eval("LocationId") + "&amp;#39;);" %&gt;'这样的HTML实体。
【解决方案2】:

如果您在标记中呈现绑定表达式标记 (),则意味着您的 LinkBut​​ton 未在绑定容器中初始化。正如@lincolnk 演示的那样,绑定容器可以是Repeater 或GridView 项、日历单元等。此外,您不必在函数调用前加上“javascript:”。 OnClientClick 属性的值呈现为锚点 onclick 事件的处理程序。

【讨论】:

    【解决方案3】:

    在网上到处找。每个人都说使用 CodeBehind。 请参阅我的解决方案,即使我的 datavalue 像 O'Neal 一样在其中包含单引号时也可以使用。 如果您的数据项包含双引号,这将不起作用。但适用于我需要它做的事情,那就是传递一个人的名字。 注意警报调用中的反斜杠。

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

    【讨论】:

      【解决方案4】:

      你可以这样做 OnClick=''

      【讨论】:

        【解决方案5】:

        我要感谢 lincolnk 的回答。我目前正在帮助为 googam.com 建立一个新的社交网络。几天来,我一直在寻找一种解决方案来查看用户的个人资料,在数据列表中,在 jquery 模式对话框弹出窗口中。在 ItemDataBound 事件中设置链接按钮 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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-03
          • 2012-12-25
          • 2015-10-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多