我正在编写具有 dojo 增强型数据网格的 Dojo Web 应用程序。在 datagid 填充数据后,我可以选择将文件保存到用户的机器上。为此,我使用 Dojo csv导出器从数据网格中以 CSV 格式创建字符串。在下面的代码中,我将该字符串传递给 csv.php 脚本,该脚本允许我将字符串保存为 csv 文件。
使用 dojo 导出器的代码:
var g = dijit.byId("grid");
g.exportGrid("csv", {
writerArgs: {
separator: ","
}
}, function(str){
debugger;
//the code below is used if the user prefers to have call to the php script on a php enabled server
var form = document.createElement('form');
dojo.attr(form, 'method', 'POST');
document.body.appendChild(form);
dojo.io.iframe.send({
url: "csv.php",
form: form,
method: "POST",
content: {exp: str},
timeout: 15000
});
document.body.removeChild(form);
});
csv.php 的 php 代码:
<?
$time = time();
header("Pragma: public");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-type: application/csv");
header("Content-Disposition: attachment; filename=\"grid_$time.csv\"");
$exportedData = $_POST['exp'];
echo stripslashes($exportedData);
exit;
?>
所以我遇到的问题是我正在使用 php 并且需要使用启用 php 的服务器。如果部署应用程序的人有这样的服务器,那么代码可以正常工作。但是,如果他使用 IIS 安装 php 并且需要在 IIS 中进行特定设置。我想编写无需额外设置即可在 II 上运行的代码。我在想 ASP 是要走的路,但我愿意接受任何建议和帮助。我如何在 asp 中重写 csv.php 代码。
谢谢
如果我的问题有问题,请不要删除它,但请告诉我要更改的内容。
更新:
这是我在 ashx 页面中的代码,但现在我得到“500 内部服务器错误”。我在 IIS 上安装了 asp.net,所以这不是问题。在 js 文件中,我只将 scv.php 更改为 csv.ashx。我必须使用不同的代码来调用 ashx 吗?
<%
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
namespace WebApplication2
{
public class Handler1 : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Request.Files(0);
Dim reader = new IO.StreamReader(context.Request.InputStream);
Dim string = reader.ReadToEnd();
context.Response.ContentType = "application/csv";
context.Response.AddHeader("Content-Disposition", "attachment; filename=Whatever.csv");
context.Response.AddHeader("content-length", context.Request.ContentLength.ToString());
Response.Write("something");
if( context.Response.IsClientConnected )
context.Response.Flush();
}
public bool IsReusable
{
get
{
return false;
}
}
}
}
%>