LoadViewState not fired on my user control

后端 未结 2 1382
刺人心
刺人心 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条回答
  • LoadViewState isn't the appropriate place for adding child controls. For dynamically adding controls within a user control, you'll want to look at the CreateChildControls method.

    It's not firing a LoadViewState event because you need to save at least one value in the ViewState to have the event fire.

    0 讨论(0)
  • 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; }
        }
    
    0 讨论(0)
提交回复
热议问题