我有一个包含几个面板的转发器。
我注意到<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,所以我也要附加这些属性。
答案 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()");
}
}