2009-03-24 14 views
0

通常、Page_Loadに配置する必要があるユーザーコントロールにコードを挿入します(他のコンポーネント(DropDownなど)を初期化する)が、Page_Loadの前に発生する必要があります。このコントロールをホストするページASP.NET:親ページのPage_Loadの前に実行

私はPage_Initでこれを入れてみました:

protected void Page_Init(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
    Methods.PopulateWhatList(cboWhatList0, cboWhatList1, fldWhat, Request["WhatId"], true); 
    Methods.PopulateWhereList(cboWhereList0, cboWhereList1, fldWhere, Request["WhereId"], true); 
    Methods.PopulateWhoList(cboWho, true, Request["WhoId"]); 
    Methods.PopulateWhenList(cboWhen, true, Request["WhenId"]); 
    Methods.PopulatePriceRangeList(cboPriceRange, true, Request["PriceRangeId"]);  
    } 
} 

...しかし、いくつかの問題を経験しています。だから、このタイプのコードに最適な場所はどこですか?

私がいる(と無関係であるかもしれない)問題は私のことです:

protected override void Render(HtmlTextWriter writer) 
{ 
    Methods.EnableValidationWhereList(cboWhereList1, this.Page); 
    Methods.EnableValidationWhatList(cboWhatList1, this.Page); 
    base.Render(writer); 
} 

は、特定のポストバックで呼び出されていませんか? (LinkBut​​tonを押すと?)

+0

一部のポストバックでRenderメソッド全体が呼び出されていない、または(私が想定している)検証ルーチンがEnableValidation__Listメソッドに追加されていると言っていますか? –

+0

また、それぞれの方法で異なるドロップダウンを行っています - それは間違いありませんか?私は、コントロールライフサイクルのどこかでcbo__List1の内容を設定していると思いますか? EnableValidation__Listは実際に何をしていますか? –

答えて

2

私はあなたが解決策を行うと提案しようとしているものに野生の推測しようとするでしょう:あなたのPage_Initページ上のさまざまなコントロールの内容を移入しているでは

を。 URLパラメータに依存しているので、if(!IsPostBack)節。

Page_Initの後に、コントロールの一部が無効な状態のままになっているため、レンダリングメソッドでコントロールを有効にする必要があります。

LinkBut​​tonでポストバックを実行すると、次のページのレンダリング時にドロップダウンが表示されません。

無効なコントロールがViewStateに保持されないことが原因です。 SaveViewStateはレンダリングの前に呼び出されるため、ページライフサイクルのコントロールが遅すぎます。

代わりにMethods.EnableValidation...呼び出しをページのPre_Renderメソッドに移動すると、コントロール状態がViewStateに保持されます。

修正した後、Page_InitメソッドのコードをPage_Loadメソッドに移動する必要があります。そうすれば、ポストバックしている場合は、コントロールデータがViewStateからロードされます。

0

ページのライフサイクルは、ページのpage_loadがコントロールのpage_loadより前に実行されるようなものです。

ページを読み込む前にデータソースを初期化する必要がある場合は、最初にbase.OnInit()が呼び出されていることを確認して、OnInitに初期化を配置できます。理想的には、viewstateに問題がないように、page_loadメカニズムへのデータバインド呼び出しを保持することが理想的です。

レンダリングメソッドについては、 「有効化」メソッドは、ページライフサイクル全体でどのような目的を果たしますか?

関連する問題