【发布时间】:2009-06-02 01:19:44
【问题描述】:
我有一个带有中继器的页面。我正在编写一个事件处理程序,以便当用户单击我的 WebControl 按钮时,所述按钮的事件处理程序使用 FindControl 遍历转发器中的项目,然后使用一些控件的值。不过,似乎在加载页面后,会填充中继器项目,但是当单击按钮将其发回时,当我遍历中继器项目时,我看到它们都是空的。我不完全理解排序,但我假设这是因为我的迭代代码试图访问尚未设置的 RepeaterItems。
中继器代码在我的 OnLoad 方法中。除此之外,我的事件处理程序在被点击后尝试遍历这些项目。这基本上就是我想要做的:
protected void MyButton_Click(object sender, EventArgs e)
{
foreach(RepeaterItem item in MyRepeater.Items)
{
MyLabel = (Label)item.FindControl("MyLabel");
}
}
该按钮位于转发器的 FooterTemplate 中。
<asp:Button runat="server" OnClick="SubmitChecklist_Click" cssclass="BlueSubmit" id="SubmitChecklist" text="Submit" />
提前致谢。
编辑:澄清一下,当我尝试做某事时,我得到的确切错误是 NullReferenceException,例如,Response.Write(MyLabel.Text)
编辑:在今天对其进行了更多研究之后,这就是我所理解的正在发生的事情:转发器在回发时是数据绑定的。然后,当我从生成的下拉列表中进行选择并点击我的按钮时,它会再次发回。此时,中继器再次数据绑定到它的初始值。因此,如果我必须回发才能获得用户的选择,我该如何在按钮的事件处理程序中执行此操作,以便在该转发器再次获得数据绑定之前获取所选值?
【问题讨论】:
-
你在哪里连接你的事件处理程序?您发布的代码应该没问题 - 这是未设置项目的问题。
-
你能从对象发送者那里得到任何信息吗?
-
我能够响应。写来自发件人的哈希码,所以我假设是这样。
-
@Lance -- 我对事件没有经验,所以我对你的问题并不肯定。我在 .aspx 中声明了按钮,这就是我过去所做的一切。
-
将按钮移出中继器时会发生什么?