3

リピーターにネストされたユーザーコントロールがあります。ユーザーコントロール内には別のリピーターがあり、その中にパネルがあります。

ユーザー コントロールの LoadViewState イベントをオーバーライドし、パネルにコントロールを動的に追加しようとしています。ビューステートが読み込まれる前に動的コントロールが追加されるように、LoadViewState でそれを行いたいので、ポストバック後に値を保持します。

何らかの理由で、ユーザー コントロール (ascx) の LoadViewState イベントが発生しません。強制的に発火させる方法はありますか、それとも別の方法がありますか? ユーザー コントロールのリピーター データ バインド イベントを除外しました。まだ。

4

2 に答える 2

7

LoadViewState子コントロールを追加するのに適切な場所ではありません。ユーザーコントロール内にコントロールを動的に追加するには、 CreateChildControlsメソッド を確認する必要があります。

LoadViewStateイベントを発生させるには、に少なくとも1つの値を保存する必要があるため、イベントは発生しませんViewState

于 2010-03-19T15:40:12.420 に答える
0

動的に作成された子ユーザー コントロールで同様の問題が発生したと思います。LoadViewState最初に作成したときに ViewState にアクセスできたとしても、ポストバックで呼び出されませんでした。SaveViewStateも正しく呼び出されたようです。子の ViewState は、完全に初期化される前にページ イベントで (これにより例外が発生することなく) 実際には使用できませんでした。Initこれは、コントロールが親に追加された場合にのみ発生しました。これを確認した後、子の ViewState はポストバック間で正しく保持されました。

    // Belongs to a Page. If you create the children control in the
    // Load event in you can also access the page ViewState
    protected void Page_Init(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            for (int it = 0; it < 5; it++)
            {
                ChildControl child = LoadControl("ChildControl.ascx")
                    as ChildControl;
                child.ParentPage = this;
                TabPanel tab = tabContainer.FindControl("TabPanel" + it)
                    as TabPanel;
                // Ensure to add the child control to its parent before
                // accessing its ViewState!
                tab.Controls.Add(child);     // <---
                string caption = "Ciao" + it;
                child.Caption = caption;     // Here we access the ViewState
                tab.HeaderText = caption;
                tab.Visible = true;
                _Children.Add(child);
            }
        }
        [...]
    }

    // Belongs to ChildControl 
    public string Caption
    {
        get { return ViewState["Caption"] as string; }
        internal set { this.ViewState["Caption"] = value; }
    }
于 2014-04-17T21:01:47.630 に答える