2012-03-14 4 views
2

動的ユーザーコントロールを持つページがプレースホルダにあります。 ページをロードすると、デフォルトでUCがロードされます(「OrigUC」と呼ぶ)。このページには、UCを別の「NewUC」に置き換えたボタンがあります。したがって、このボタンはajaxを使用してポストバックし、UCを置き換えます。C#:ダイナミックユーザーコントロールIsPostbackは、UCが最初に読み込まれたにもかかわらず、trueイベントを返します。

私のPage_Loadでは、私はIsPostBack()をチェックしますが、何らかの理由でUCを初めてロードしたにもかかわらずそれでも私は本当のことを返します。なぜそれが真実に戻っているのか、私はIsPostBackがUCのPage_Loadの中でチェックしているので、UCが返ってきたかどうかを返すと思った。

私は今から、それが呼び出されたページから来るユーザーコントロールのIsPostbackをもっと理解しています... UCがページから初めて呼び出されたかどうかをどのように判断できますか?

例:

それはUCがページ内に呼び出された最初の時間であれば、私はDBをquerytheしても、外部ウェブとUCのコントロールをバインドする必要があります。私が部分的なポストバックを引き起こした場合、私はDBとWebSを再度照会したくありません。あなたのコントロールは何をした場合、要求は、POST HTTPリクエストでなかった場合

If (!IsUserControlPostBack) 
{ 
// Step 1 Init of UC 
// Call to DB 
// Call to WebS 
} 
else 
{ 
// A Post back occured ... 
// It can be Page who triggered it or UC and I do not want to call Step 1 again 
// DO something else. 
} 

C

+0

定義し、「OK初めて"。あなたのアプリケーションで初めて?このユーザーの初めてですか?初めてこのフルページをリフレッシュする(例:ajax経由) Web環境で初めてのことは何ですか? – Stilgar

答えて

2

私は私がに行く最初の時間を制御するユーザーをロードするとき、私は設定されたフラグを格納するためにViewStateを使用しました。

希望を、このヘルプ私のような別のnoob :)

private bool IsUCPostBack 
    { 
     get 
     { 
      object o = ViewState["S2UC"]; 
      return o == null; 
     } 
     set 
     { 
      ViewState["S2UC"] = true; 
     } 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (IsUCPostBack) 
     { 
      IsUCPostBack = true; ... } else { ... } 
+0

ユーザーコントロールのispostbackプロパティが失敗します。これは、コントロールが初めて読み込まれたかどうかを確認する良い方法です。共有してくれてありがとう。 – shazia

2

IsPostBackプロパティプロパティが決定されます。ページがボタンを介して送信されたため、要求はPostBack要求(ASP.NET用語)です。基本的には、このプロパティは、あなたが思っていることはしませんし、実際には関係していません。

1

ボタンは「ポストバック」を実行しています。 IsPostBackは、ユーザーコントロールが読み込まれているPageオブジェクトに対してtrueです。

+0

これで、UCが呼び出されたページからのユーザーコントロールのIsPostbackがもっと理解できるようになりました。UCが初めて呼び出されたかどうかをどのように判断できますか? – Gotcha

+0

私は、組み込みの方法を教えてくれるのではないかと心配ですが、コントロール名を使ってセッション変数を設定し、その値をtrueに設定することができます。存在する場合、コントロールは既にロードされています。そうでなければ、コントロールはロードされていません。 –