将onmouseover属性添加到<asp:repeater> </asp:repeater> </asp:panel>中的<asp:panel>

时间:2011-02-16 10:23:17

标签: c# repeater panel webforms onmouseover

我有一个包含几个面板的转发器。 我注意到<asp:Panel>没有onmouseover属性。 我已经读过,我可以通过调用page_load:

来将该属性添加到面板中
PanelID.Attributes.Add("onmouseover", "Script to Run");

问题是我在转发器中,PanelID由asp.net生成,如ContentPlaceHolder_ctl01_myID_0,因此不仅难以弄清楚,而且VS2010不会将其识别为正确的对象并在其上引发错误,加上我必须在每个项目上附加它,所以我需要使用for或foreach,但我不知道要迭代什么。 有没有像

这样的方式
foreach(childcontrol in Repeater.ChildControlsISpecificallyNeedPossiblyIdentifiedBySomeID)
{
 childcontrol.Attributes.Add("onmouseover", "Script to Run");
}

在Page_Load事件处理程序的C#中执行此操作? 我想在面板上运行客户端onload,onmouseclick和onmouseout,所以我也要附加这些属性。

4 个答案:

答案 0 :(得分:0)

面板在客户端用div表示,您可以使用SomePanel.ClientID获取客户端ID,但是如果您指的是触发面板,则可以始终使用this的JavaScript

不会将所有事件处理程序放在每个元素上

答案 1 :(得分:0)

在框外思考,而不是使用ASP.NET内联指定onmouseover - 属性,您可以在javascript 中附加javascript事件监听器

给面板一个CSS类:

<asp:Panel CssClass="panel"></asp:Panel>

使用jQuery,绑定事件处理程序的语法如下:

$(".panel").mouseover(functionToRun);

如果你不使用jQuery,你需要更多的代码,但我相信你明白了。

答案 2 :(得分:0)

在转发器onitemdatabound的情况下将属性添加到面板中并找到该控件,因为每次绑定行时都会调用此事件,因此您不必将其称为foreach。

答案 3 :(得分:0)

您可以考虑使用ItemDataBound事件。

protected void myRepeater_ItemDataBound(object source, RepeaterCommandEventArgs e) {   
    if(e.Item.ItemType == ListItemType.Item){
       Panel pnl = (Panel)e.Item.FindControl("myPanel");   
       pnl.Attributes.Add"onMouseOver", "yourFnctionName()");
    }
}