私は、dojo拡張データグリッドを備えたDojoWebアプリケーションを作成しています。datagidにデータが入力された後、ファイルをユーザーのマシンに保存するオプションがあります。これを行うために、CSV形式でデータグリッドから文字列を作成するDojocsvエクスポーターを使用しています。次のコードでは、その文字列を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対応サーバーを使用する必要があるということです。アプリケーションをデプロイする人がそのようなサーバーを持っている場合、コードは問題なく機能します。ただし、彼がPHPのIISインストールを使用している場合は、IISの特定の設定が必要です。追加の設定なしでIIで実行できるコードを書きたいです。ASPが進むべき道だと思っていましたが、どんな提案や助けも受け入れています。そのcsv.phpコードをaspで書き直すにはどうすればよいですか。
ありがとう
私の質問に何か問題がある場合は、それを削除しないでください。ただし、何を変更するかを教えてください。
アップデート:
これはashxページにあるコードですが、「500InternalServerError」が表示されます。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;
}
}
}
}
%>