我在应用程序中的某些报告出现问题我正在进行管理
我有一个按钮,它会回发到服务器并执行一些信息,然后回到客户端并打开一个弹出窗口来下载报告。
private void grid_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
...
ClientScript.RegisterClientScriptBlock(this.GetType(), "xxx", "<script>javascript:window.location('xx.aspx?m=x','xxx','width=750,height=350,directories=no,location=no,menubar=no,scrollbars,status=no,toolbar=no,resizable=yes,left=50,top=50');</script>");
}
然后在xxx.aspx中我有代码:
Response.ClearContent();
Response.ClearHeaders();
Response.TransmitFile(tempFileName);
Response.Flush();
Response.Close();
File.Delete(tempFileName);
Response.End();
如果启用了IE选项自动提示文件下载,则此工作正常。但默认情况下这是禁用的,我需要强制下载框提示。
如果不更改大量代码,我可以做任何事情吗?
感谢。
答案 0 :(得分:2)
这是Internet Explorer的设计。该开关告诉IE不显示该对话框,除非用户右键单击并从菜单中选择“下载”。
你无能为力。
自动下载阻止会自动禁止用户未启动的文件下载对话框(例如单击鼠标或按键)。当对话框被阻止时,信息栏将显示在窗口的顶部。用户可以通过单击信息栏下载被阻止的内容。
答案 1 :(得分:1)
有一个标题会导致显示下载框。尝试添加Content-Disposition标头以触发它:
内容 - 处置:附件;文件名= fname.ext
答案 2 :(得分:1)
我过去做过这个,似乎有效。我猜你正在尝试传输硬盘上存在的文件...
版本1 在您的Page_Load事件处理程序中。添加此...(示例在VB中)
'Prepare page for a file download
Response.ContentType = "application/x-msdownload"
Response.AddHeader("content-disposition", "attachment; filename=thefilename.ext")
Response.WriteFile(pathToFile)
此代码用于将Excel文件返回给用户。
第2版(旧项目代码)
在服务器上的按钮单击事件中
Dim Results As New DataSet()
Results.DataSetName = "SearchExport"
Dim SearchTable As DataTable
Dim sFileName As String = "SearchExport.xls"
Response.ContentType = "application/x-msexcel"
Response.AddHeader("content-disposition", String.Format("attachment; filename={0}", sFileName))
SearchTable = GetTheSearchResults()
SearchTable.TableName = "SearchResults"
Results.Tables.Add(SearchTable)
' This example takes the xml and converts it to HTML using XSLT, replace this with your string of data that should be returned. Or put Response.WriteFile() instead.
Response.Write(ConvertToString(Results.GetXml))
Response.End()
这个答案的第2版是来自另一个项目的复制/粘贴,它不直接做你想要的,但你应该能够填补空白。 (即删除临时文件等)
答案 3 :(得分:0)
尝试使用
window.open
代替window.location
希望这有帮助
答案 4 :(得分:0)
设置适当的标题并使用 BinaryWrite 方法将有效...
string filePath = "the path to your file";
byte[] fileData = MethodToReadBinaryContentsOfFile(filePath);
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.Charset = null;
Response.AddHeader("Content-Disposition", "attachment;filename=the name to save the file as");
Response.ContentType = "binary/octet";
Response.BinaryWrite(fileData);
System.IO.File.Delete(filePath);
Response.End();