This is a migrated thread and some comments may be shown as answers.

RadDock - Failed to load viewstate error and persisting layout

0 Answers 104 Views
Dock
This is a migrated thread and some comments may be shown as answers.
Meena
Top achievements
Rank 1
Meena asked on 04 Jun 2018, 01:09 PM

Greetings, 

        I am trying to implement the RadDock functionality in example similar to the "MyPortal" Demo . The language used is C#. I follow the same way as shown in the demo except for the part that instead of populating the usercontrols in the dropdown and clicking the 'Add Dock' button to add the dock to the dockzone , I use seperate buttons and  on clicking each button it loads respective user control to  RadDock control and displays it. Each control has a Radgrid inside that displays different data. 

While opening/closing the raddocks after a point it throws an error such as 'Failed to load viewstate' error . Is there a way to rectify it ?? Since there are controls such as dropdown, radgird which also initiates a postback , I cant set the EnableViewState=false for each page as well. 

Also , in the demo Session is used to save/load the raddockstates . How to save and reload these states using database. Can you provide me with an example ? I did search on other forum posts regarding the raddock state persistance , where I see that the states are being only updated or loaded but not inserted so I am not sure how to insert , update and select the rad dock states from the database without having the above mentioned error. Kindly help me asap as its very urgent.

Below attached image shows how my page look like and the c# code is pasted as well. 

        private List<DockState> CurrentDockStates
        {
            get
            {
                List<DockState> _currentDockStates = (List<DockState>)Session["CurrentDockStatesDynamicDocks"];
                if (Object.Equals(_currentDockStates, null))
                {
                    _currentDockStates = new List<DockState>();
                    Session["CurrentDockStatesDynamicDocks"] = _currentDockStates;
                }
                return _currentDockStates;
            }
            set
            {
                Session["CurrentDockStatesDynamicDocks"] = value;
            }
        }

        public ArrayList GetZones()
        {
            ArrayList zones = new ArrayList();
            zones.Add(RadDockZone1);
            //zones.Add(RadDockZone2);

            return zones;
        }

   
        private void Page_Init(object sender, EventArgs e)
        {
                  for (int i = 0; i < CurrentDockStates.Count; i++)
            {
                // clears the closed docks from the dock state, this line is 
                // optional and its purpose is to keep the dock state as small 
                // as possible
                if (CurrentDockStates[i].Closed == true) continue;

                RadDock dock = CreateRadDockFromState(CurrentDockStates[i]);
                //We will just add the RadDock control to the RadDockLayout.
                // You could use any other control for that purpose, just ensure
                // that it is inside the RadDockLayout control.
                // The RadDockLayout control will automatically move the RadDock
                // controls to their corresponding zone in the LoadDockLayout
                // event (see below).
                RadDockLayout1.Controls.Add(dock);
                //We want to save the dock state every time a dock is moved.
                CreateSaveStateTrigger(dock);
                //Load the selected widget
                LoadWidget(dock);

                // prevents the rendering of closed docks, used for improving 
                // performance
                if (CurrentDockStates[i].Closed == true)
                {
                    dock.Visible = false;
                }
            }

            //UpdatePanel2.Triggers.Add(new PostBackTrigger() { ControlID = rdbAddEqpgSettings.UniqueID });
            //UpdatePanel2.Triggers.Add(new PostBackTrigger() { ControlID = rdbAddEqpgConstraints.UniqueID });
            //UpdatePanel2.Triggers.Add(new PostBackTrigger() { ControlID = rdbViewInputDetails.UniqueID });

            UpdatePanel2.Triggers.Add(new PostBackTrigger() { ControlID = rdbViewResults.UniqueID });
            UpdatePanel2.Triggers.Add(new PostBackTrigger() { ControlID = rdbResultHistory.UniqueID });
            Updat
        }

private RadDock CreateRadDockFromState(DockState state)
        {
            RadDock dock = new RadDock();
            dock.DockMode = DockMode.Docked;
            dock.ID = string.Format("RadDock{0}", state.UniqueName);
            dock.ApplyState(state);
            dock.Commands.Add(new DockCloseCommand());
            dock.Commands.Add(new DockExpandCollapseCommand());

            return dock;
        }
        private RadDock CreateRadDock(string title)
        {
         RadDock dock = new RadDock();
            dock.DockMode = DockMode.Docked;
            dock.UniqueName = Guid.NewGuid().ToString().Replace("-", "a");
            dock.ID = string.Format("RadDock{0}", dock.UniqueName);
            dock.Title = "Dock";
            dock.Text = string.Format("Added at {0}", DateTime.Now);
            dock.Width = Unit.Pixel(300);

            dock.Commands.Add(new DockCloseCommand());
            dock.Commands.Add(new DockExpandCollapseCommand());

            return dock;
        }

          
 
        private void CreateSaveStateTrigger(RadDock dock)
        {
            //Ensure that the RadDock control will initiate postback
            // when its position changes on the client or any of the commands is clicked.
            //Using the trigger we will "ajaxify" that postback.
            dock.AutoPostBack = true;
            dock.CommandsAutoPostBack = true;

            AsyncPostBackTrigger saveStateTrigger = new AsyncPostBackTrigger();
            saveStateTrigger.ControlID = dock.ID;
            saveStateTrigger.EventName = "DockPositionChanged";
            UpdatePanel1.Triggers.Add(saveStateTrigger);

            saveStateTrigger = new AsyncPostBackTrigger();
            saveStateTrigger.ControlID = dock.ID;
            saveStateTrigger.EventName = "Command";
            UpdatePanel1.Triggers.Add(saveStateTrigger);
        }

        private void LoadWidget(RadDock dock)
        {
            if (string.IsNullOrEmpty(dock.Tag) || dock.Closed)
            {
                return;
            }
            switch (dock.Tag)
            {
                case "EquipmentGroupConstraintsForm.ascx":
                    {
                        Control widget = LoadControl("~/Main/UserControls/EquipmentGroupConstraintsForm.ascx");
                        dock.ContentContainer.Controls.Add(widget);
                    }
                    break;
                case "EquipmentGroupSettingsForm.ascx":
                    {
                        Control widget = LoadControl("~/Main/UserControls/EquipmentGroupSettingsForm.ascx");
                        dock.ContentContainer.Controls.Add(widget);
                    }
                    break;
                case "InputDetailsForm.ascx":
                    {
                        Control widget = LoadControl("~/Main/UserControls/InputDetailsForm.ascx");
                        dock.ContentContainer.Controls.Add(widget);
                    }
                    break;
                case "ResultDetails.ascx":
                    {
                         Control widget = LoadControl("~/Main/UserControls/ResultDetails.ascx");
                         dock.Width = Unit.Pixel(1331);
                        dock.ContentContainer.Controls.Add(widget);
                    }
                    break;
                case "ExpResultHistory.ascx":
                    {
                        dock.Width = Unit.Pixel(1320);
                        Control widget = LoadControl("~/Main/UserControls/ExpResultHistory.ascx");
                        dock.ContentContainer.Controls.Add(widget);
                    }
                    break;
            }

        }

        protected void RadDockLayout1_SaveDockLayout(object sender, DockLayoutEventArgs e)
        {
            CurrentDockStates = RadDockLayout1.GetRegisteredDocksState();
        }

        protected void RadDockLayout1_LoadDockLayout(object sender, DockLayoutEventArgs e)
        {
            foreach (DockState state in CurrentDockStates)
            {
                e.Positions[state.UniqueName] = state.DockZoneID;
                e.Indices[state.UniqueName] = state.Index;
            }
        }

        protected void rdbAddEqpgSettings_Click(object sender, EventArgs e)
        {
            RadDock dock = CreateRadDock("Create Equipment Group Settings");
            RadDockZone dz = (RadDockZone)this.Master.FindControl("ContentPlaceholder1").FindControl("RadDockZone1");
            dock.Index = 0;
            RadDockLayout1.Controls.Add(dock);
            dock.Dock(dz);

            CreateSaveStateTrigger(dock);
            dock.Closed = false;

            dock.Tag = "EquipmentGroupSettingsForm.ascx";
            LoadWidget(dock);

        }

        protected void rdbAddEqpgConstraints_Click(object sender, EventArgs e)
        {
            RadDock dock = CreateRadDock("Create Equipment Group Constraints");
            RadDockZone dz = (RadDockZone)this.Master.FindControl("ContentPlaceholder1").FindControl("RadDockZone1");
            dock.Index = 0;
            RadDockLayout1.Controls.Add(dock);
            dock.Dock(dz);

            CreateSaveStateTrigger(dock);
            dock.Closed = false;

            dock.Tag = "EquipmentGroupConstraintsForm.ascx";
            LoadWidget(dock);
          
        }

        protected void rdbViewInputDetails_Click(object sender, EventArgs e)
        {
            //rdbViewInputDetails.Enabled = false;
            //UpdatePanel2.Update();

            RadDock dock = CreateRadDock("View Input Details");
            RadDockZone dz = (RadDockZone)this.Master.FindControl("ContentPlaceholder1").FindControl("RadDockZone1");
            dock.Index = 0;
            RadDockLayout1.Controls.Add(dock);
            dock.Dock(dz);

            CreateSaveStateTrigger(dock);
            dock.Closed = false;

            dock.Tag = "InputDetailsForm.ascx";
            LoadWidget(dock);
        }

        protected void rdbViewResults_Click(object sender, EventArgs e)
        {
            RadDock dock = CreateRadDock("View Result Details");
            RadDockZone dz = (RadDockZone)this.Master.FindControl("ContentPlaceholder1").FindControl("RadDockZone1");
            dock.Index = 0;
            RadDockLayout1.Controls.Add(dock);
            dock.Dock(dz);

            CreateSaveStateTrigger(dock);
            dock.Closed = false;

            dock.Tag = "ResultDetails.ascx";
            LoadWidget(dock);
        }

        protected void rdbResultHistory_Click(object sender, EventArgs e)
        {
            RadDock dock = CreateRadDock("Result History");
            RadDockZone dz = (RadDockZone)this.Master.FindControl("ContentPlaceholder1").FindControl("RadDockZone1");
            dock.Index = 0;
            RadDockLayout1.Controls.Add(dock);
            dock.Dock(dz);

            CreateSaveStateTrigger(dock);
            dock.Closed = false;

            dock.Tag = "ExpResultHistory.ascx";
            LoadWidget(dock);

        }
    }
}

Thanks and Regards, 

Meena

 

 

 

 

 

 

 

 

 

 

 

 

 

 

No answers yet. Maybe you can help?

Tags
Dock
Asked by
Meena
Top achievements
Rank 1
Share this question
or