我在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
: NULL pushpins
:已初始化 currentPageLabel
: NULL 为什么某些控件已初始化而其他控件未初始化?如果我想更新Text
上的currentPageLabel
媒体资源,如何解决此问题?
更新
我在整个页面生命周期中都放置了断点,发现nextButton
和currentPageLabel
从未初始化。断点放在OnLoad,CreateChildControls,goButton_Click,OnPreRender,Render和OnUnload。
答案 0 :(得分:0)
你是否有可能无意中获得了名为currentPageLabel和/或nextButton的局部变量?编译器很乐意允许这个......
这在从ASP.NET 1.1迁移到2.0或更高版本时尤其常见,因为设计人员定义这些控件的方式发生了变化。
答案 1 :(得分:0)
问题是所有未初始化的控件都在Repeater控件中的HeaderTemplate中。 (为了节省空间,我没有把我的所有代码都粘贴到问题中,然后就开始了。)
我把它们移出来,问题解决了。显然,HeaderTemplate中的控件由Repeater实例化,并且不遵循正常的页面生命周期。