0

標準パラダイムを使用して、ポストバック中に初期化をやり直すことを回避するユーザー コントロールがありますif(!IsPostBack){//initialize myself}(そのため、ViewState の使用量を増やすために DB ヒットを少なくします)。このアプローチはほとんどの場合うまく機能しますが、ポストバック中に、このコントロールを「遅く」コントロール階層に追加したい場所が 1 つあります。

もちろん、これにより初期化ロジックが失敗し、コントロールが初期化されていない状態でレンダリングされます。

!IsPostBackカットしていないので、初期化する必要があるかどうかを判断するためにどのガードを使用する必要がありますか? 中にフラグを設定できましLoadViewStateたが、それは少しハックなようです。私が見つけたいのは、コントロールが最初にコントロール階層に追加されたときにのみ発生する条件であり、それをキーにします。そのような条件は存在しますか?

[編集] 含まれているページのサンプル疑似コードは次のとおりです。

protected void Page_Prerender(object sender, EventArgs e)
{
    Controls.Add(LoadControl("some_control.ascx"));
}

some_control遅れて追加されたことを知る方法はありますか?

4

4 に答える 4

0

さらに検索しても、この問題の一般的な解決策には至りませんでした。私がやったことはPage_LoadViewState、コントロールの初期化を抑制するフラグを設定することでした-事実上、初期化を で保護するのと同じことです!IsPostBackが、もう少し正確です。

于 2009-09-15T22:42:13.277 に答える