ASP.NET用户控件Repeater.ItemDataBound事件未被触发

时间:2012-08-15 16:30:34

标签: c# asp.net user-controls repeater

在aspx中注册的事件

<asp:Repeater ID="StepRepeater" OnItemDataBound="StepRepeater_ItemDataBound1" runat="server">

尝试使用AutoEventWireUp true&amp;假

这是后面代码中的方法:

    public void LoadSteps(Request request)
    {
        Repeater StepRepeater = new Repeater();

        StepRepeater.DataSource = request.Steps;
        StepRepeater.DataBind();
    }
    protected void StepRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
}

当单步执行时,它直接通过“StepRepeater.DataBind();”没有点击ItemDataBound事件。

如果有任何其他信息有帮助,请与我们联系。

2 个答案:

答案 0 :(得分:2)

您的OnItemDataBound值与您的方法名称不符。

OnItemDataBound="StepRepeater_ItemDataBound1"

protected void StepRepeater_ItemDataBound

1末尾删除OnItemDataBound或更改您的方法名称。


同样@Adil已说明,请移除new Repeater()行:

Repeater StepRepeater = new Repeater();

更新:在阅读有关添加new Repeater()行以防止出现空引用错误的其他答案的评论后:

添加new Repeater()将创建Repeater控件的新实例,因此引用ASPX标记文件上的Repeater

如果您收到空引用异常,则应检查Inherits指令中的@Page属性(通常是ASPX文件的最顶行)是否与class匹配。您的.aspx.cs文件,以及您的CodeFile媒体资源与.aspx.cs文件名匹配。

答案 1 :(得分:0)

您有binded个事件ItemDataBound到StepRepeater in html,但您要分配新创建的转发器对象no event is attached to this repeater object的数据源。

删除此声明

 Repeater StepRepeater = new Repeater();

您的代码将是

public void LoadSteps(Request request)
{
    StepRepeater.DataSource = request.Steps;
    StepRepeater.DataBind();
}

更改html中OnItemDataBound事件的名称以匹配

背后的代码
<asp:Repeater ID="StepRepeater" OnItemDataBound="StepRepeater_ItemDataBound" runat="server">