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.