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

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

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

$('#') 

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

基本代码如下:

    
fun and exciting stuff here...

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

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

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

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

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

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

  

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

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

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

希望这可以帮助

而不是使用scriptlet:

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

使用绑定表达式:

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

注意差异是而不是=

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

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

 ','<%= Session["member_id"] %>')">Redeem Now 

并使用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); } }); }); }); 

如果是你所使用的click事件,你不能使用linkbutton的OnClientClick属性吗? 还是他们在3.5中删除了?

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

 $("[id$=Button1]") 

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

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