2

我在 Web 部件中嵌入了一个用户控件。它有以下代码片段:

protected TextBox searchTextBox;
protected Button goButton;
protected Button nextButton;
protected Repeater pushpins;
protected Label currentPageLabel;

protected void goButton_Click(object sender, EventArgs e)
{
 // Do stuff
}

<asp:TextBox ID="searchTextBox" runat="server" />
<asp:Button ID="goButton" runat="server" Text="Go" OnClick="goButton_Click" />
<asp:Repeater ID="pushpins" runat="server" EnableViewState="false">
 <ItemTemplate>Blah</ItemTemplate>
</asp:Repeater>
<asp:Label ID="currentPageLabel" runat="server" />
<asp:Button ID="nextButton" runat="server" Text=" >> " OnClick="nextButton_Click" />

(没有 OnLoad 或 CreateChildControls 方法。)

如果我在 的第一行放置一个断点goButton_Click,我会发现:

  • searchTextBox:初始化
  • goButton:初始化
  • nextButton:
  • pushpins:初始化
  • currentPageLabel:

为什么有些控件被初始化而有些没有?如果我想更新Text属性,我该如何解决currentPageLabel

更新:

我在页面生命周期中一直放置断点,发现它nextButton从未初始化过。断点位于 OnLoad、CreateChildControls、goButton_Click、OnPreRender、Render 和 OnUnload。currentPageLabel

4

2 回答 2

0

您是否可能无意中在某处声明了名为 currentPageLabel 和/或 nextButton 的局部变量?编译器会很高兴地允许这个......

这在从 ASP.NET 1.1 迁移到 2.0 或更高版本时尤其常见,因为设计人员定义这些控件的方式发生了变化。

于 2010-01-29T21:32:06.610 回答
0

问题是所有未初始化的控件都在Repeater 控件的HeaderTemplate 中。(为了节省空间,我没有将我的所有代码都粘贴到问题中,该死的。)

我把它们搬走了,问题就解决了。显然HeaderTemplate中的控件是由Repeater实例化的,并不遵循正常的页面生命周期。

于 2010-01-31T10:44:54.137 回答