2012-01-18 67 views
3

這個問題是非常相似的 How do I find the Client ID of control within an ASP.NET GridView?如何在ListView中找到控件的ClientId?

但是我使用一個ListView和一個標籤:

<ItemTemplate> 
    <asp:ImageButton ImageUrl="Resources/info.png" ToolTip="info" OnClientClick="toggle('<%#((label)Container).FindControl("PresetUploadDescription").ClientID %>');" ID="Description" runat="server"/> 
    <asp:Label ID="UploadDescription" BorderStyle="Solid" BorderColor="Goldenrod" BorderWidth="1" runat="server" Width="40em" CssClass="sc-Upload-description" Text='<%# Eval("Description") %>'></asp:Label> 
.... 

我得到一個「的服務器標記的格式不正確」的的FindControl( )功能...任何想法爲什麼?我已經嘗試了'標籤'和'控制'劇組...

+0

標籤應標註 – dugas 2012-01-18 23:32:25

+0

也許是這樣,但它並沒有幫助... – Gio 2012-01-18 23:34:45

+0

嘗試#<%= Control.ClientID%>和錯誤定義,如果你不給任何每個屬性之間的空間會給你帶來錯誤。 – coder 2012-01-18 23:40:53

回答

2

據我所知,有兩種方法可以完成您要做的事情。請使用asp:ImageButton服務器控件,並使用OnItemDataBound事件連接onclick客戶端事件,或者直接使用<input type="image" />控件並以內聯方式連接ClientID。下面的示例顯示了這兩種方法:

<%@ Page Language="C#" AutoEventWireup="true" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"><title>OnClick Test</title></head> 
<body> 
<form id="form1" runat="server"> 
<div> 
    <asp:ListView ID="lv1" OnItemDataBound="lv1_ItemDataBound" runat="server"> 
     <ItemTemplate> 
      <asp:Label ID="label1" Text="<%# Container.DataItem %>" runat="server" /> 
      <asp:ImageButton ID="btn1" 
          ImageUrl="myimage.jpg" 
          AlternateText="Show Text" 
          runat="server" /> 
      <input type="image" src="myimage.jpg" alt="Show Text" 
        onclick="alert(document.getElementById('<%# Container.FindControl("label1").ClientID %>').innerText);" 
      /> 
      <br /> 
     </ItemTemplate> 
    </asp:ListView> 
</div> 
</form> 
</body> 
</html> 
<script runat="server"> 
public void Page_Load(object sender, EventArgs e) 
{ 
    if (Page.IsPostBack) return; 
    lv1.DataSource = new[] {"Manny", "Moe", "Jack"}; 
    lv1.DataBind(); 
} 

protected void lv1_ItemDataBound(object sender, ListViewItemEventArgs e) 
{ 
    var label1 = e.Item.FindControl("label1") as Label; 
    var btn1 = e.Item.FindControl("btn1") as ImageButton; 
    if (label1 == null || btn1 == null) return; 
    btn1.Attributes.Add("onclick", "alert(document.getElementById('" + label1.ClientID + "').innerText);"); 
} 
</script> 
+0

其實這兩個方法都可以工作。我昨晚找到了ItemDataBound方法,儘管其他實現了'your_control'.OnClickClient =「alert(...)」;對不起,我不能給你兩個答案,雖然... – Gio 2012-01-19 21:02:53