2009-01-14 67 views
4

我試圖做一些應該比較簡單的事情。我使用ListView來顯示一些項目,使用ItemTemplate。在ItemTemplate的內部,我有一個圍繞整個項目的div,以便我可以突出顯示懸停事件(已由jQuery處理)。如何在asp:listview中使用jQuery使用asp:按鈕的clientID以供使用?

我想要做的就是在div上點擊一個按鈕,打開一個按鈕,打開該特定項目的詳細信息視圖。我遇到的問題是在使用jQuery時拉回該按鈕的ClientID。我試過了:

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

route,但是不起作用,因爲當頁面加載時按鈕不存在。

的基本代碼如下:

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

任何建議或幫助是非常感謝!

回答

2

將方法連接到ListView的ItemDataBound事件。在那裏,您可以在ListViewItemEventArgs參數的Item屬性上使用FindControl方法來獲取對您列表中每個項目的LinkBut​​ton的引用。從這個參考資料中,您可以獲得ClientID,並且可以根據需要進行處理。

UPDATE
在你可以與參考按鈕做什麼而言,最簡單的可能是剛分配點擊事件在ItemDataBound事件,也許是這樣的

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

如果您需要在客戶端連接它,也許您可​​以維護一個將客戶ID映射到項目ID的字典,並將該字典發送到客戶端,在那裏您可以遍歷它並將事件連接起來。

+0

當您的解決方案似乎首先工作,問題是將ClientID注入頁面,以便我可以在客戶端使用jQuery來引用它。也許我不明白你的意思? – riceboyler 2009-01-14 22:24:36

+0

正是我需要的!感謝修復! – riceboyler 2009-01-19 16:32:24

4

你爲什麼不給這些linkbuttons一個特定的CSS類?

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

然後在jquery中,只需選擇類將它們全部分配給一個調用。

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

如果不工作,因爲對象不是在那個時候,您就可以使用jquerylive()方法。它也將事件分配給任何動態添加的元素。

希望這有助於

+0

非常有趣的想法,與live()方法。我可能會這樣做。類想法的問題是我需要觸發特定按鈕上的click()事件,因此一次分配所有按鈕將無法完成我所需的操作。但是,活的東西可能會起作用,所以我會嘗試它! – riceboyler 2009-01-14 22:22:38

1

如果它的點擊事件,你是後不能使用的LinkBut​​ton的OnClientClick屬性?還是他們刪除了3.5?

1

你可以用這種語法選擇按鈕(假設Button1的是按鈕的服務器ID):

$("[id$=Button1]") 

,將選擇所有的DOM元素的ID爲「Button1的」結束。

這是必要的,因爲元素的結果客戶端ID反映了服務器控制結構。

3

代替使用的scriptlet的:

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

使用的結合表達:

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

通知所不同的是代替=

綁定表達式在數據綁定時被評估,因此您的表達式將在當前數據項的上下文中進行評估。在頁面呈現時(在頁面生命週期的最後階段)對頁面進行評估,並在頁面上下文中評估,而不是特定的數據項。

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

       } 
      }); 

     }); 

    });