Hi all,
I am looking to achieve the following functionality: All events whose effects are self-contained to a RadDock should only cause post-back for that specific RadDock.
That being said, it is (slightly!) more complicated than this. All my RadDocks and RadDockZones on my page are dynamically created and regenerated.
I have reviewed the information given here, but I did not find this documentation enough to successfully achieve my goal. As such, I have a few questions.
This is a piece of code which is responsible for creating a new RadDock on my page, as well as attaching it to a RadDockZone. Note that RadDockLayout is not used (I've implemented my own). I am wondering if I need to say "RadAjaxManager1.AjaxSettings.AddAjaxSetting(dockZone, dock, null)" here during creation of this control. My gut is saying, "Yes. You do" because the controls are rendered to the user immediately after creation. If I only hook up settings during Page_Load then the control will be displayed to the user once, then a post back occurs, page_load fires, and now the control is wrapped in an update panel. As such, it is my belief that it is necessary to add it to AjaxManager immediately. Please correct me if I am wrong here.
Now, lets talk about what needs to occur every time a page load occurs. RadAjaxManager is a persistent control on my page. So, it is my belief that it does not forget the AjaxSettings it knew from before a post-back occurs, but that it probably does forget after a full page refresh. As such, it is my belief that I do need to re-setup settings during each page load, but that I should be looking into my AjaxSettings collection to see if a setting is known already. If the RadDockZone (the control to initiate an ajax request) is unknown, then I add it to the collection, else skip since it's already known.
Here is my current Page_Load event. Should I be treating the AjaxManager similarly to that of the RadTabStrip -- only hooking up controls if its a fresh page, else assuming that they're already known to it (being added through the event described above)?
I went ahead and played with all of this myself for a bit, but I noticed I was doing something incorrect. What I saw was that the RadDock would fire a post-back event, the hidden update panel would capture the event, but that the RadDock would not update. Interacting with the page again caused it to update, but the update panel I had wrapped was lost (haven't fussed with regenerating it through post-back, so this is expected behavior.) Might be a deeper-seated issue than just improper setting up of the code, though, so I figured I'd come here first.
Is my reasoning sound? What other gotchas should I be aware of?
Thanks.
Sean
I am looking to achieve the following functionality: All events whose effects are self-contained to a RadDock should only cause post-back for that specific RadDock.
That being said, it is (slightly!) more complicated than this. All my RadDocks and RadDockZones on my page are dynamically created and regenerated.
I have reviewed the information given here, but I did not find this documentation enough to successfully achieve my goal. As such, I have a few questions.
- I understand that there is an inherited complexity to this issue in the fact that RadDocks are able to be moved between RadDockZones. This appears to disqualify making the RadDock the designated 'control initiating post-back.' If I attempt to say "RadAjaxManager1.AjaxSettings.Add(dock, dock, null)" I am told that RadDockZone must have RadDock as child (and not this hidden update panel). As such, it is my belief that I will be achieving my desired results through wrapping of the RadDockZone in a hidden update panel, and not each individual RadDock.
- That being said, my project does have constraints which may be useful/relevant to this issue -- Each RadDockZone has a 0 to 1 relationship with a RadDock. That is, RadDockZones with greater than 1 RadDock is not a supported scenario for my project. In addition, each RadPane on my page will have no more than 1 RadDockZone on it. Keeping things very simple 1:1:1 display.
- In addition, each of my RadDocks is currently housing an UpdatePanel. This is used to update the contents of the dock instantly (charts that drill-down.) I know that UpdatePanels may sometimes cause conflicts, so I thought this was worth mentioning.
- The RadAjaxManager documentation states that adding AJAX pairs dynamically to the RadAjaxManager should only be performed during Page_Load. I am curious if I need to perform initial "hook-up" of the setting when the control is dynamically created and then regenerate this state similarly to how all the other states on my page are regenerated. An example:
protected
void
LstBxSettings_Dropped(
object
sender, RadListBoxDroppedEventArgs e)
{
RadDockZone dockZone = DashboardLayoutManager.Instance.RegisteredDockZones.FirstOrDefault(registeredDockZone => e.HtmlElementID.Contains(registeredDockZone.ID));
if
(!
object
.Equals(dockZone,
null
) && !dockZone.Docks.Any())
{
RadPane activeControlPane = (RadPane)dockZone.Parent;
Orientation orientation = (Orientation)Enum.Parse(
typeof
(Orientation), e.SourceDragItems[0].Value);
CormantRadSplitter newContent = CreationManager.CreateNewContent(orientation, activeControlPane);
//Put newly created control in front so it will always be visible. (E.G. RadDockZone1 fights with it)
activeControlPane.Controls.AddAt(0, newContent);
RadControlManager.SaveNewContent(newContent);
lstBxSettings.ClearSelection();
}
}
This is a piece of code which is responsible for creating a new RadDock on my page, as well as attaching it to a RadDockZone. Note that RadDockLayout is not used (I've implemented my own). I am wondering if I need to say "RadAjaxManager1.AjaxSettings.AddAjaxSetting(dockZone, dock, null)" here during creation of this control. My gut is saying, "Yes. You do" because the controls are rendered to the user immediately after creation. If I only hook up settings during Page_Load then the control will be displayed to the user once, then a post back occurs, page_load fires, and now the control is wrapped in an update panel. As such, it is my belief that it is necessary to add it to AjaxManager immediately. Please correct me if I am wrong here.
Now, lets talk about what needs to occur every time a page load occurs. RadAjaxManager is a persistent control on my page. So, it is my belief that it does not forget the AjaxSettings it knew from before a post-back occurs, but that it probably does forget after a full page refresh. As such, it is my belief that I do need to re-setup settings during each page load, but that I should be looking into my AjaxSettings collection to see if a setting is known already. If the RadDockZone (the control to initiate an ajax request) is unknown, then I add it to the collection, else skip since it's already known.
protected
void
Page_Load(
object
sender, EventArgs e)
{
Logger.Info(
"Page Load"
);
RegenerationManager.Instance.RegenerateDockContents();
if
(!Page.IsPostBack)
{
RegenerationManager.Instance.RegenerateTabs(RadTabStrip1);
ScriptManager.RegisterStartupScript(Page, Page.GetType(),
"KEY01"
,
"ForceResize();"
,
true
);
}
}
Here is my current Page_Load event. Should I be treating the AjaxManager similarly to that of the RadTabStrip -- only hooking up controls if its a fresh page, else assuming that they're already known to it (being added through the event described above)?
I went ahead and played with all of this myself for a bit, but I noticed I was doing something incorrect. What I saw was that the RadDock would fire a post-back event, the hidden update panel would capture the event, but that the RadDock would not update. Interacting with the page again caused it to update, but the update panel I had wrapped was lost (haven't fussed with regenerating it through post-back, so this is expected behavior.) Might be a deeper-seated issue than just improper setting up of the code, though, so I figured I'd come here first.
Is my reasoning sound? What other gotchas should I be aware of?
Thanks.
Sean