1

我有一个包含几个面板的中继器。我注意到没有 onmouseover 属性<asp:Panel>。我读过我可以通过调用 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");
}

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

4

4 回答 4

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()");
    }
}
于 2011-02-16T10:45:21.807 回答
0

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

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

于 2011-02-16T10:30:35.997 回答
0

跳出框框思考,您可以在 javascript 中附加 javascript 事件侦听器,而不是使用 ASP.NET 指定-attributeonmouseover inline 。

给面板一个 CSS 类:

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

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

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

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

于 2011-02-16T10:34:06.513 回答
0

在中继器 onitemdatabound 事件中将属性添加到面板并在其中找到控件,因为每次绑定行时都会调用此事件,因此您不必调用它 foreach。

于 2011-02-16T10:35:05.580 回答