我有以下转发器控件,它绑定到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>
</SeparatorTemplate>
</asp:Repeater>
我想将ImageButton的ID属性绑定到DashboardPage对象的Name属性,类似这样
ID="<%# Eval('Name') %>"
但抛出异常:
控件的ID属性只能使用标记中的ID属性和简单值进行设置。
我需要图片的ID属性,因为我有一个客户端脚本,使用它的ID更改图像。有办法解决这个问题吗?
感谢您的回复
此致 Gagik Kyurkchyan
答案 0 :(得分:1)
由于您发现无法动态设置服务器控件的ID,因此您需要找到一种使用JavaScript引用图像的替代方法。我能想到三种方式:
设置控件的CssClass属性并改为使用它。使用DOM按类而不是ID来查找控件效率稍微低一些,但在现实世界中这可能是微不足道的。
以标准DIV
包裹您的图片。并在容器DIV
上设置ID。然后,您可以使用类似jQuery的内容$("#divid img")...
使用标准<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>