如何在ASP.net上显示另存为对话框
本文关键字:显示 另存为 对话框 net ASP | 更新日期: 2023-09-27 18:17:07
我是asp.net上的新手,我正在开发在线报告生成器,我想让客户选择他/她想把他/她的文件放在哪里,所以这是我的代码,但似乎没有工作,它返回到我的ajax错误声明我的ConfigurationManager。AppSettings["ExtractFolder"]等于"c:'temp'":只是想问代码出了什么问题?
context.Response.ContentType = "application/vnd.ms-excel";
context.Response.AddHeader("content-disposition", "attachment;filename="+filename);
context.Response.WriteFile(ConfigurationManager.AppSettings["ExtractFolder"]+filename);
context.Response.Flush();
context.Response.End();
试试这个
String FileName = "FileName.txt";
String FilePath = "C:/...."; //Replace this
System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
response.ClearContent();
response.Clear();
response.ContentType = "text/plain";
response.AddHeader("Content-Disposition", "attachment; filename=" + FileName + ";");
response.TransmitFile(FilePath);
response.Flush();
response.End();
更多内容类型查看我们的http://en.wikipedia.org/wiki/MIME_type#List_of_common_media_types
基本上你不能按照你想做的方式做你想做的事。
你所拥有的ASP.net代码依赖于完整的http请求/响应周期的一部分。设置header的部分是告诉浏览器下载内容的地方。一个AJAX请求正在用它的请求寻找一个特定的返回,通常是javascript可传递的数据。您返回的不是这个,而是一个文件的内容。
这里有一篇文章解释了更多的概念和问题。它还为您提供了另一种解决方案。基本上,解决方案围绕着使用iFrame来处理文件下载请求。
首先,检查要发送给用户的源文件是否在c:'temp'目录下,并且已将filename设置为要发送的文件的名称。接下来,您需要确保您的。net进程在服务器上具有访问c:'temp的权限。可能不会。
同样,确保您理解响应。Writefile 实际上是从服务器读取文件并将其写入浏览器。你不能指定用户在本地保存文件的位置,这是由浏览器处理的,而不是由你的代码。
使用Coders示例代码,确保您更改了以下内容(请参阅我的注释)
String FileName = "FileName.xlsx"; //MAKE SURE THIS IS YOUR EXCEL FILENAME ON YOUR SERVER
String FilePath = "C:/...."; //SET THIS TO THE FOLDER THE FILE IS IN (put your file in your root folder of your website for now, you can move it later once you get the download code working)
System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
response.ClearContent();
response.Clear();
response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; //MAKE SURE YOU HAVE CHANGED THIS TOO
response.AddHeader("Content-Disposition", "attachment; filename=" + FileName + ";");
response.TransmitFile(FilePath);
response.Flush();
response.End();
我还建议先在独立页面中尝试上述操作,然后在您知道其工作后将其合并到AJAX页面中。