我正在使用Telerik RadGrid控件,并且我正在使用GridAttachmentColumn作为他们文档中的推荐来下载文件,但我看到丢失了一些东西,也许是一些Code Behind?该文档讨论了禁用Ajax进行文件上传和导出但未下载的问题?
SQL表包含UNC路径,其中这些文件存储在网络共享中。 “下载”列指向正确的数据\位置,文件路径变为超链接,但单击它时不执行任何操作。
我也试过使用一个超链接列,它似乎部分适用于IE但不适用于Chrome。部分是因为一些文件被下载并且一些文件在屏幕上呈现。我需要使用适用于这两种浏览器的解决方案下载它们。
这是网格代码:
<telerik:RadGrid ID="RadGrid1" runat="server" DataSourceID="SqlDataSource1" Skin="WebBlue" AllowPaging="True">
<GroupingSettings CollapseAllTooltip="Collapse all groups"></GroupingSettings>
<MasterTableView AutoGenerateColumns="False" DataSourceID="SqlDataSource1" NoDetailRecordsText="No attachments to display.">
<DetailTables>
<telerik:GridTableView runat="server" DataKeyNames="SessionId" DataSourceID="SqlDataSource2" AllowPaging="False" PageSize="5" NoDetailRecordsText="No attachment to display.">
<Columns>
<telerik:GridAttachmentColumn DataSourceID="SqlDataSource2" HeaderText="Download" AttachmentDataField="DocName" AttachmentKeyFields="1" FileNameTextField="DocName" DataTextField="Path" UniqueName="Attachments" MaxFileSize="1048576">
</telerik:GridAttachmentColumn>
</Columns>
</telerik:GridTableView>
</DetailTables>
<CommandItemSettings ShowAddNewRecordButton="False" ShowExportToExcelButton="True" ShowExportToPdfButton="True" ShowExportToWordButton="True" ShowRefreshButton="False" />
<Columns>
<telerik:GridBoundColumn DataField="SessionId" FilterControlAltText="Filter SessionId column" HeaderText="SessionId" SortExpression="SessionId" UniqueName="SessionId" Visible="False">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="Ticket Number" FilterControlAltText="Filter TicketNumber column" HeaderText="Ticket Number" SortExpression="TicketNumber" UniqueName="TicketNumber">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="Title" FilterControlAltText="Filter Title column" HeaderText="Title" SortExpression="Title" UniqueName="Title">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="Description" FilterControlAltText="Filter Description column" HeaderText="Description" SortExpression="Description" UniqueName="Description" Visible="False">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="AffectedUser" FilterControlAltText="Filter AffectedUser column" HeaderText="AffectedUser" SortExpression="AffectedUser" UniqueName="AffectedUser">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="AssignedTo" FilterControlAltText="Filter AssignedTo column" HeaderText="AssignedTo" SortExpression="AssignedTo" UniqueName="AssignedTo">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="Owner" FilterControlAltText="Filter Owner column" HeaderText="Owner" SortExpression="Owner" UniqueName="Owner">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="Location" FilterControlAltText="Filter Location column" HeaderText="Location" SortExpression="Location" UniqueName="Location">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="Resolution" FilterControlAltText="Filter Resolution column" HeaderText="Resolution" SortExpression="Resolution" UniqueName="Resolution">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="Close Date" DataType="System.DateTime" FilterControlAltText="Filter CloseDate column" HeaderText="Close Date" SortExpression="CloseDate" UniqueName="CloseDate">
</telerik:GridBoundColumn>
</Columns>
</MasterTableView>
<FilterMenu RenderMode="Lightweight"></FilterMenu>
<HeaderContextMenu RenderMode="Lightweight"></HeaderContextMenu>
</telerik:RadGrid>
我猜测Telerik没有预测此控件的UNC路径使用情况,看起来你需要添加一些斜杠并将其格式化以使链接完全可点击。
file://///server/path/to/file.txt
即便如此,它可能无法完全跨浏览器兼容。从网站访问本地文件存在安全风险。
用不同的方法解决了这个问题。
DataNavigateUrlFormatString="~\filedownload_6?FileName={0}"
文件下载页码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace DBSearchSolution
{
public partial class filedownload_6 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//string filename = Request.QueryString["29215_1_0_image001.png"].ToString();
string filename = Request.QueryString["FileName"].ToString();
Response.ContentType = "application/octet-steam";
Response.AppendHeader("content-disposition", "attachment; filename=" + filename);
Response.TransmitFile( Server.MapPath("~/Files/" + filename));
Response.End();
}
}
}