如何在asp:listview中提取asp:按钮的clientID以与jQuery一起使用?

时间:2009-01-14 18:33:11

标签: c# asp.net jquery

我正在尝试做一些应该相对简单的事情。我使用ListView来使用ItemTemplate显示许多项目。在ItemTemplate中我有一个围绕整个项目的div,因此我可以在悬停事件上突出显示(由jQuery处理)。

我想要做的是让div上的click事件触发一个按钮,打开该特定项目的详细信息视图。我遇到的问题是在使用jQuery时撤回该按钮的ClientID。我试过了:

$('#<%= Button1.ClientID %>')

路由,但这不起作用,因为页面加载时Button不存在。

基本代码如下:

<asp:listview>
 <itemtemplate>
  <td runat="server">
   <div class="container">
    <asp:linkbutton id="Button1" runat="server" text="View Details" />
     fun and exciting stuff here...
   </div>
  </td>
 </itemtemplate>
</asp:listview>

非常感谢任何建议或帮助!

6 个答案:

答案 0 :(得分:4)

为什么不直接给这些链接按钮一个特定的css类?

<asp:linkbutton id="Button1" runat="server" text="View Details" CssClass="detailsButtons" />

然后在jquery中选择要在一次调用中分配它们的类。

$(".detailsButtons").click( function() { .... } );

如果因为当时没有制作对象而无效,则可以在jquery中使用新的live()方法。它还会将事件分配给任何动态添加的元素。

希望这有帮助

答案 1 :(得分:3)

而不是使用scriptlet:

$('#<%= Button1.ClientID %>')

使用绑定表达式:

$('#<%# Button1.ClientID %>')

请注意,区别在于而不是 =

绑定表达式在绑定数据时进行计算,因此表达式将在当前数据项的上下文中进行计算。在呈现页面时(在页面生命周期的最后)评估Scriptlet,并在页面的上下文中评估,而不是特定的数据项。

答案 2 :(得分:2)

将方法连接到ListView的ItemDataBound事件。在那里,您可以在FindControl参数的Item属性上使用ListViewItemEventArgs方法,为列表中的每个项目获取对该LinkBut​​ton的引用。从该引用中,您可以获得ClientID,并且无论您需要做什么,都可以使用它。

<强>更新
就你可以对按钮的引用所做的事情而言,最简单的可能只是在ItemDataBound事件中分配你的click事件,也许是这样的事情

var button = (Button)e.Item.FindControl("Button1");
button.OnClientClick = "ShowEditDialog(" + Eval("ItemId") + ")";

如果你需要在客户端连接它,也许你可以维护一个字典映射ClientIDs到Item ID,并将该字典发送到客户端,在那里你可以迭代它并连接事件。

答案 3 :(得分:2)

您可以使用cssclass触发点击甚至..

<a class="confirm" id="alert" onmouseover="got('<%# Eval("Gift_ID") %>','<%= Session["member_id"] %>')">Redeem Now</a> 

并使用jquery触发点击甚至基于此类..

$(function() {
        $(".confirm").easyconfirm();
        $(".confirm").click(function() {
            var id = document.getElementById("test").value;
            var mem_id = document.getElementById("test1").value;
            document.getElementById("test").setAttribute("value", "");
            document.getElementById("test1").setAttribute("value", "");
            var param = "{'id':'" + id + "','mem_id':'" + mem_id + "'}"
            $.ajax({

                type: "POST",
                url: "Offer.aspx/Hello_World",
                data: param,
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                async: true,
                cache: false,
                success: function(msg) {
                    alert("hello");
                    $('#myDiv').text(msg.d);

                }
            });

        });

    });

答案 4 :(得分:1)

如果是你所追踪的点击事件,你不能使用linkbutton的OnClientClick属性吗?或者他们是否删除了3.5?

答案 5 :(得分:1)

您可以使用此语法选择按钮(假设Button1是按钮的服务器ID):

$("[id$=Button1]")

将选择id以“Button1”结尾的所有DOM元素。

这是必要的,因为元素的结果客户端ID反映了服务器控制结构。