LoadViewState not fired on my user control

后端 未结 2 1391
刺人心
刺人心 2021-01-21 05:20

I have a user control nested in a repeater. Inside my user control I have another repeater and in that I have a panel.

I am trying to override the LoadViewState event

2条回答
  •  半阙折子戏
    2021-01-21 05:41

    I think I had a similar problem with some dynamically created children user controls. LoadViewState wasn't called in postbacks even if I was able to access their ViewState when creating them first. SaveViewState seemed to be also called correctly. It ended that the children ViewState was not really usable (without this resulting in an exception) in the page Init event before they were fully initializated, and this happened only when the controls were added to the parent. After having ensured this, the children ViewState was correctly persisted across postbacks.

        // 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; }
        }
    

提交回复
热议问题