I am trying to open a radwindow from an already opened window. I need both of them at the same hierarchy level as well as being modal windows.
After reading http://www.telerik.com/help/aspnet-ajax/window_programmingopeningfromwithin.html I was able to open the second window using RadWindow and a javascript function. Unfortunately, the second window showed up behind the current one which was not the desired behavior. I tried several methods such as setActive() and show() methods but neither proved to be working for me. So I decided to hide the current window and open the second window while adding a callback method using add_close() event handler to unhide the hidden original window after the second window gets closed. This method is producing an "out of stack space" error. Now I have to mention that I add a callback on every radwindow close event without any problem and this was done exactly the same way so I doubt that I was incorrectly using the add_close() method. And if I take out oWnd.add_close(callback); from the javascript code, it works fine except that I cannot bring the original window back. Is there a way I can get this to work?
Here are the relevant mark up and javascript codes:
RadWindow Markup in parent.ascx, child_original.aspx, child_second.aspx files:
javascript code in parent.ascx file which opens the original pop-up form:
javascript code in original pop-up form (child_original.aspx) which opens the second pop-up form:
common javascript code being shared by all of them:
Call stack when "out of stack space" error occurs:
After reading http://www.telerik.com/help/aspnet-ajax/window_programmingopeningfromwithin.html I was able to open the second window using RadWindow and a javascript function. Unfortunately, the second window showed up behind the current one which was not the desired behavior. I tried several methods such as setActive() and show() methods but neither proved to be working for me. So I decided to hide the current window and open the second window while adding a callback method using add_close() event handler to unhide the hidden original window after the second window gets closed. This method is producing an "out of stack space" error. Now I have to mention that I add a callback on every radwindow close event without any problem and this was done exactly the same way so I doubt that I was incorrectly using the add_close() method. And if I take out oWnd.add_close(callback); from the javascript code, it works fine except that I cannot bring the original window back. Is there a way I can get this to work?
Here are the relevant mark up and javascript codes:
RadWindow Markup in parent.ascx, child_original.aspx, child_second.aspx files:
<telerik:RadWindowManager ID="RadWindowManager1" runat="server" Skin="Black"> </telerik:RadWindowManager>javascript code in parent.ascx file which opens the original pop-up form:
function ID_OnClientClicked(ID) { var url = "/Portal/child_original.aspx"; var strTabID = "?TabID=" + $get(OpenTab).value; var qryString = "&ID=" + ID; OpenTelerikWindow(url, strTabID, qryString, 800, 400, "Info 1", Child_Original_OnClientClose, "Info1"); } function Child_Original_OnClientClose(oWnd, args) { var arg = args.get_argument(); if (arg && arg.Rebind) { $find(AjaxPanel).ajaxRequest(arg.ID); } oWnd.SetUrl('about:blank'); oWnd.remove_close(Child_Original_OnClientClose); oWnd.Close(); }javascript code in original pop-up form (child_original.aspx) which opens the second pop-up form:
function Child_Original_OnClientClicked(ID) { var url = "/Portal/Child_second.aspx"; var strTabID = "?TabID=" + $get(OpenTab).value; var qryString = "&ID=" + ID; OpenParentTelerikWindow(url, strTabID, qryString, 1000, 700, "Info2", Info2_OnClientClose, "Info2"); }common javascript code being shared by all of them:
function OpenTelerikWindow(formURL, strTabID, strQueryString, width, height, title, callback, name) { var windowID = ResolveUrl(formURL) + strTabID + strQueryString; if (windowID != "") { var oWnd = radopen(windowID, name); oWnd.setSize(width, height); oWnd.set_modal(true); oWnd.set_title(title); oWnd.set_visibleStatusbar(false); oWnd.set_behaviors(Telerik.Web.UI.WindowBehaviors.Move + Telerik.Web.UI.WindowBehaviors.Close); if (callback != null && callback != undefined) oWnd.add_close(callback); } } function OpenParentTelerikWindow(formURL, strTabID, strQueryString, width, height, title, callback, name) { var windowID = ResolveUrl(formURL) + strTabID + strQueryString; if (windowID != "") { var curWnd = GetRadWindow(); var oBrowserWnd = curWnd.BrowserWindow; var oWnd = oBrowserWnd.radopen(windowID, name); oWnd.setSize(width, height); oWnd.set_modal(true); oWnd.set_title(title); oWnd.set_visibleStatusbar(false); oWnd.set_behaviors(Telerik.Web.UI.WindowBehaviors.Move + Telerik.Web.UI.WindowBehaviors.Close); if (callback != null && callback != undefined) oWnd.add_close(callback); //oWnd.show(); oWnd.setActive(); curWnd.hide(); } } function GetRadWindow() { var oWindow = null; if (window.radWindow) oWindow = window.radWindow; else if (window.frameElement.radWindow) oWindow = window.frameElement.radWindow; return oWindow; } function Info2_OnClientClose(oWnd, args) { // method to bring back the original child form back: to be implemented oWnd.SetUrl('about:blank'); oWnd.remove_close(Info2_OnClientClose); oWnd.Close(); }Call stack when "out of stack space" error occurs:
Function$_validateParams JScript Error$argumentType JScript Function$_validateParameterType JScript Function$_validateParameter JScript Function$_validateParams JScript Error$argumentType JScript Function$_validateParameterType JScript Function$_validateParameter JScript <<Repeats over 100 times... Clipped>> Function$_validateParams JScript Error$argumentType JScript Function$_validateParameterType JScript Function$_validateParameter JScript Function$_validateParams JScript Sys$EventHandlerList$addHandler JScript JScript anonymous function JScript OpenParentTelerikWindow JScript Error occurring at: OpenParentTelerikWindow: oWnd.add_close(callback); JScript anonymous function: c.extend({registerControlEvents:function(e,d){c.each(d,function(f,g){e.prototype["add_"+g]=function(h){this.get_events().addHandler(g,h); }; Sys$EventHandlerList$addHandler: var e = Function._validateParams(arguments, [ {name: "id", type: String}, {name: "handler", type: Function} ]); Function$_validateParams: e = Function._validateParameter(params[i], expectedParam, paramName); Function$_validateParameter: e = Function._validateParameterType(param, expectedType, expectedInteger, expectedDomElement, mayBeNull, paramName); Function$_validateParameterType: e = Error.argumentType(paramName, Object.getType(param), expectedType); Error$argumentType: var e = Function._validateParams(arguments, [ {name: "paramName", type: String, mayBeNull: true, optional: true}, {name: "actualType", type: Type, mayBeNull: true, optional: true}, {name: "expectedType", type: Type, mayBeNull: true, optional: true}, {name: "message", type: String, mayBeNull: true, optional: true} ]);