2

プレースホルダーに動的ユーザーコントロールのあるページがあります。ページをロードすると、デフォルトでUC(「OrigUC」と呼びます)がロードされます。このページには、UCを別の「NewUC」に置き換えたボタンがあります。したがって、このボタンはajaxを使用してポストバックし、UCを置き換えます。

NewUCのPage_Loadで、IsPostBack()をチェックしますが、何らかの理由で、初めてUCをロードした場合でも、trueが返されます。なぜそれがtrueを返すのですか、UCのPage_Load内でチェックしているので、IsPostBackがUCを返すかどうかを返すと思いました。何かが足りませんか?

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

例:

ページ内でUCが初めて呼び出される場合は、DBと外部WebSにクエリを実行し、UCのコントロールをバインドする必要があります。部分的なポストバックをトリガーした場合、DBとWebSに再度クエリを実行したくありません。

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

4

3 に答える 3

2

IsPostBackプロパティは、コントロールが何かを行ったかどうかではなく、リクエストがPOSTHTTPリクエストであったかどうかを判断します。ページはボタンを介して送信されたため、要求はPostBack要求です(ASP.NET用語で)。基本的に、このプロパティはあなたが思っていることをしませんし、実際には何の関係もありません。

于 2012-03-14T12:09:45.383 に答える
2

わかりました。ViewStateを使用して、初めてユーザーコントロールをロードするときに設定したフラグを保存しました。

これが私のような別の初心者に役立つことを願っています:)

    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 { ...   }
于 2012-03-16T09:57:59.737 に答える
1

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

于 2012-03-14T12:10:05.113 に答える