Hey Guys,
I've followed one of the forum topics on here in respect of disabling AJAX for a specific postback. Basically I have a button on a page that creates a PDF file. Because the routine is modifying the response and adding response headers, AJAX failed to work. So this is what I've done:
ASPX Page:
The ClientEvents-OnRequestStart javascript script looks like this:
On the server side I have this:
My question now is, after the server code has executed, I need to re-enable the controls which I just disabled using the Javascript script. I have tried using the ScriptManager.RegisterStartupScript but the javascript never gets called. How can I re-enable the controls after the entire routine has finished executing?
The javascript script I'm using to re-enable the controls looks like this:
The alert box is never shown either. I need to re-enable the controls so that the user can continue selecting other filters or re-export the document if they choose to do so. Since the code modifies the response headers, I cannot ajaxify the button control and use a loading panel instead. Any ideas or thoughts?
The reason why I'm hiding the controls is so that the user is aware that there is activity at that point in time after clicking the button.
I've followed one of the forum topics on here in respect of disabling AJAX for a specific postback. Basically I have a button on a page that creates a PDF file. Because the routine is modifying the response and adding response headers, AJAX failed to work. So this is what I've done:
ASPX Page:
<telerik:RadAjaxManager ID="RadAjaxManager1" runat="server" EnableAJAX="true" UpdatePanelsRenderMode="Inline" ClientEvents-OnRequestStart="onRequestStart"><%-- AJAX EVENTS GOES HERE --%></telerik:RadAjaxManager>The ClientEvents-OnRequestStart javascript script looks like this:
function onRequestStart(ajaxManager, eventArgs) { if (eventArgs.EventTarget == "ctl00$ContentPlaceHolder1$btnMainExportToPDF") { eventArgs.set_enableAjax(false); document.getElementById("<%= btnMainExportToPDF.ClientID %>").style.display = "none"; document.getElementById("<%= imgExportLoader.ClientID %>").style.display = ""; } }On the server side I have this:
protected void btnMainExportToPDF_Click(object sender, EventArgs e) { string transDateStart = ""; string transDateEnd = ""; if (dtTransDateStart.SelectedDate.HasValue && dtTransDateEnd.SelectedDate.HasValue) { transDateStart = string.Format("{0}-{1}-{2}", dtTransDateStart.SelectedDate.Value.Year.ToString(), dtTransDateStart.SelectedDate.Value.Month.ToString().PadLeft(2, '0'), dtTransDateStart.SelectedDate.Value.Day.ToString().PadLeft(2, '0')); transDateEnd = string.Format("{0}-{1}-{2}", dtTransDateEnd.SelectedDate.Value.AddDays(1).Year.ToString(), dtTransDateEnd.SelectedDate.Value.AddDays(1).Month.ToString().PadLeft(2, '0'), dtTransDateEnd.SelectedDate.Value.AddDays(1).Day.ToString().PadLeft(2, '0')); } string storeID = hfActiveSelectedStoreID.Value; string pageRequestURL = string.Format("ReportsPrint-GlobalSpendHistory.aspx?TS={0}&TE={1}&SI={2}", NecBase.Encryption(transDateStart), NecBase.Encryption(transDateEnd), NecBase.Encryption(storeID)); string gridQuery = GetMainGridQuery(false); Session["mainGridQuery"] = NecBase.Encryption(gridQuery); //Also add to Session: Master Category, Sub Category, Products IList<RadComboBoxItem> selMasterCategories = cboMainCategories.CheckedItems; IList<RadComboBoxItem> selSubCategories = cboSubCategories.CheckedItems; //IList<RadComboBoxItem> selProducts = cboProducts.CheckedItems; Session["selMasterCats"] = GetStringArrayFromIList(selMasterCategories); Session["selSubCats"] = GetStringArrayFromIList(selSubCategories); //Session["selProducts"] = GetStringArrayFromIList(selProducts); StringWriter sWriter = new StringWriter(); Server.Execute(pageRequestURL, sWriter); string htmlCodeToConvert = sWriter.GetStringBuilder().ToString(); PdfConverter pdfConverter = new PdfConverter(); pdfConverter.LicenseKey = ConfigurationManager.AppSettings["EvoPdfKey"].ToString(); pdfConverter.HtmlViewerWidth = 793; pdfConverter.PdfDocumentOptions.PdfPageSize = PdfPageSize.A4; pdfConverter.PdfDocumentOptions.PdfPageOrientation = PdfPageOrientation.Portrait; pdfConverter.PdfDocumentOptions.PdfCompressionLevel = PdfCompressionLevel.Normal; pdfConverter.PdfDocumentOptions.ShowHeader = false; pdfConverter.PdfDocumentOptions.ShowFooter = false; pdfConverter.PdfDocumentOptions.FitWidth = true; pdfConverter.PdfDocumentOptions.EmbedFonts = true; pdfConverter.PdfDocumentOptions.LiveUrlsEnabled = true; pdfConverter.JavaScriptEnabled = true; pdfConverter.PdfDocumentOptions.JpegCompressionEnabled = true; byte[] pdfBytes = pdfConverter.GetPdfBytesFromHtmlString(htmlCodeToConvert.ToString()); string fileName = string.Format("SpendHistoryReport_{0}{1}{2}", DateTime.Today.Date.Day.ToString(), DateTime.Today.Date.Month.ToString(), DateTime.Today.Date.Year.ToString()); HttpResponse response = HttpContext.Current.Response; response.Clear(); response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.pdf; size={1}", fileName, pdfBytes.Length.ToString())); response.BinaryWrite(pdfBytes); response.End(); }My question now is, after the server code has executed, I need to re-enable the controls which I just disabled using the Javascript script. I have tried using the ScriptManager.RegisterStartupScript but the javascript never gets called. How can I re-enable the controls after the entire routine has finished executing?
The javascript script I'm using to re-enable the controls looks like this:
function reEnableControl() { alert('test'); document.getElementById("<%= imgExportLoader.ClientID %>").style.display = "none"; document.getElementById("<%= btnMainExportToPDF.ClientID %>").style.display = ""; }The alert box is never shown either. I need to re-enable the controls so that the user can continue selecting other filters or re-export the document if they choose to do so. Since the code modifies the response headers, I cannot ajaxify the button control and use a loading panel instead. Any ideas or thoughts?
The reason why I'm hiding the controls is so that the user is aware that there is activity at that point in time after clicking the button.