将控件的ID属性绑定到对象属性

时间:2011-12-19 08:18:42

标签: asp.net

我有以下转发器控件,它绑定到DashboardPage对象的集合。 DashboardPage具有以下属性:名称,页面编号

<asp:Repeater ID="reportPages" runat="server">           
      <ItemTemplate>
        <asp:ImageButton    runat="server" onclick="ImageButton_Click" 
        ImageUrl="<%# GetImagePath(Container.DataItem) %>" 
        onmouseover="<%# GetMouseOverEventString(Container.DataItem) %>"
        onmouseout="<%# GetMouseOutEventString(Container.DataItem) %>"
         />
      </ItemTemplate>

      <SeparatorTemplate>
        &nbsp;&nbsp;
      </SeparatorTemplate>
  </asp:Repeater>

我想将ImageButton的ID属性绑定到DashboardPage对象的Name属性,类似这样

ID="<%# Eval('Name') %>"

但抛出异常:

  

控件的ID属性只能使用标记中的ID属性和简单值进行设置。

我需要图片的ID属性,因为我有一个客户端脚本,使用它的ID更改图像。有办法解决这个问题吗?

感谢您的回复

此致 Gagik Kyurkchyan

2 个答案:

答案 0 :(得分:1)

由于您发现无法动态设置服务器控件的ID,因此您需要找到一种使用JavaScript引用图像的替代方法。我能想到三种方式:

  1. 设置控件的CssClass属性并改为使用它。使用DOM按类而不是ID来查找控件效率稍微低一些,但在现实世界中这可能是微不足道的。

  2. 以标准DIV包裹您的图片。并在容器DIV上设置ID。然后,您可以使用类似jQuery的内容$("#divid img")...

  3. 使用标准<img>代码(不含runat="server")而不是asp:Image控件。然后,您可以毫无问题地设置ID。

答案 1 :(得分:0)

您可以使用ItemDataBound来设置ID。

CODEBEHIND:

protected void myRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    var textbox = e.Item.FindControl("myTextBox");
    textbox.ID = "myTextBox" + (e.name).toString(); /*ToString() method can be unnecessary in some cases.*/
}

<强> REPEATER:

<asp:Repeater ID="myRepeater" runat="server" OnItemDataBound="BehaviorCustomizeRepeater_ItemDataBound">
/*other stuffs*/
</asp:Repeater>