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初期化
  • nextButtonNULL
  • pushpins初期化
  • currentPageLabelNULL

一部のコントロールが初期化され、他のコントロールが初期化されないのはなぜですか?Textプロパティを更新したい場合、どうすればこれを回避できcurrentPageLabelますか?

アップデート:

ページのライフサイクル全体にブレークポイントを設定しましたが、それが初期化されることはnextButtonありません。ブレークポイントは、OnLoad、CreateChildControls、goButton_Click、OnPreRender、Render、およびOnUnloadに配置されました。currentPageLabel

4

2 に答える 2

0

currentPageLabelやnextButtonという名前のローカル変数がどこかで誤って宣言された可能性はありますか?コンパイラはこれを喜んで許可します...

これは、設計者がこれらのコントロールを定義する方法が変更されたため、ASP.NET1.1から2.0以降への移行で特に一般的です。

于 2010-01-29T21:32:06.610 に答える
0

問題は、初期化されていないすべてのコントロールが、Repeaterコントロール内のHeaderTemplate内にあることでした。(スペースを節約するために、すべてのコードを質問に貼り付けたわけではありません。

私はそれらを移動し、問題は解決しました。明らかに、HeaderTemplateのコントロールはリピーターによってインスタンス化され、通常のページのライフサイクルには従いません。

于 2010-01-31T10:44:54.137 に答える