I'm having trouble writing a pdf file to the browser when a user clicks a linkbutton inside a radgrid detailview gridtableview gridtemplatecolumn. The grid is also wrapped in an update panel. The click event fires and the bytes are written to the response without error. However the browser's file download dialog never appears.
Any insights would be greatly appreciated.
Any insights would be greatly appreciated.
<
asp:UpdatePanel
ID
=
"updatePanel"
ClientIDMode
=
"Static"
runat
=
"server"
>
<
ContentTemplate
>
<
telerik:RadGrid
ID
=
"rgDocuments"
runat
=
"server"
Width
=
"100%"
ShowStatusBar
=
"False"
AutoGenerateColumns
=
"False"
AllowSorting
=
"False"
AllowMultiRowSelection
=
"False"
AllowPaging
=
"False"
Skin
=
"EACS"
EnableEmbeddedSkins
=
"false"
OnDetailTableDataBind
=
"rgDocuments_DetailTableDataBind"
OnNeedDataSource
=
"rgDocuments_NeedDataSource"
OnPreRender
=
"rgDocuments_PreRender"
>
<
MasterTableView
Width
=
"100%"
DataKeyNames
=
"DOCUMENT_AUTHOR_ID"
AllowMultiColumnSorting
=
"True"
>
<
DetailTables
>
<
telerik:GridTableView
DataKeyNames
=
"DOCUMENT_AUTHOR_ID,DOCUMENT_AUTHOR_CATEGORY_ID"
Name
=
"Categories"
Width
=
"100%"
>
<
DetailTables
>
<
telerik:GridTableView
DataKeyNames
=
"DOCUMENT_ID,PARENT_DOCUMENT_ID"
Name
=
"ParentDocuments"
Width
=
"100%"
>
<
DetailTables
>
<
telerik:GridTableView
DataKeyNames
=
"DOCUMENT_ID,FILENAME,TITLE"
Name
=
"Documents"
Width
=
"100%"
>
<
Columns
>
<
telerik:GridBoundColumn
DataField
=
"DOCUMENT_ID"
Visible
=
"false"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"FILENAME"
Visible
=
"false"
>
</
telerik:GridBoundColumn
>
<
telerik:GridTemplateColumn
HeaderText
=
"Section Title"
>
<
ItemTemplate
>
<
asp:LinkButton
ID
=
"btnDocument"
runat
=
"server"
OnClick
=
"btnDocument_Click"
Text='<%# Eval("Title") %>'></
asp:LinkButton
>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
</
Columns
>
</
telerik:GridTableView
>
</
DetailTables
>
<
Columns
>
<
telerik:GridBoundColumn
DataField
=
"DOCUMENT_ID"
Visible
=
"false"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
HeaderText
=
"Document Title"
DataField
=
"TITLE"
>
</
telerik:GridBoundColumn
>
</
Columns
>
</
telerik:GridTableView
>
</
DetailTables
>
<
Columns
>
<
telerik:GridBoundColumn
DataField
=
"DOCUMENT_AUTHOR_CATEGORY_ID"
Display
=
"false"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
HeaderText
=
"Category"
DataField
=
"DISPLAY_VALUE"
>
</
telerik:GridBoundColumn
>
</
Columns
>
</
telerik:GridTableView
>
</
DetailTables
>
<
Columns
>
<
telerik:GridBoundColumn
DataField
=
"DOCUMENT_AUTHOR_ID"
Visible
=
"false"
></
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
HeaderText
=
"Author Name"
DataField
=
"DISPLAY_VALUE"
></
telerik:GridBoundColumn
>
</
Columns
>
</
MasterTableView
>
</
telerik:RadGrid
>
</
ContentTemplate
>
</
asp:UpdatePanel
>
protected
void
btnDocument_Click(
object
sender, EventArgs e)
{
LinkButton lb = (LinkButton)sender;
GridDataItem item = (GridDataItem)lb.NamingContainer;
if
(item !=
null
)
{
string
documentUploadPath = ConfigurationManager.AppSettings[
"DocumentUploadPath"
].ToString();
string
filename = documentUploadPath + item.GetDataKeyValue(
"FILENAME"
).ToString();
string
title = documentUploadPath + item.GetDataKeyValue(
"TITLE"
).ToString();
if
(File.Exists(Server.MapPath(filename)))
{
System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
byte
[] bytes = File.ReadAllBytes(Server.MapPath(filename));
response.Clear();
response.AddHeader(
"Content-Type"
,
"binary/octet-stream"
);
response.AddHeader(
"Content-Disposition"
,
"attachment; filename="
+ title +
".pdf;"
);
response.Flush();
response.BinaryWrite(bytes);
response.Flush();
response.End();
}
}
}