0

私は、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;
            }
        }
    }
}
%>
4

2 に答える 2

0

個人的には .Net 4.5 を使用し、単純な Web アプリを作成するだけです。私はphpが好きではありません。

C# .Net 4.5 バージョン

従来の ASP バージョン

これにより、同じことを行う方法についてかなり良いアイデアが得られるはずです。開発速度の理由から、従来の ASP で記述した方が価値があるかもしれません... ただし、それははるかに古いものです。

于 2012-11-15T22:22:48.887 に答える
0

私は物事のphp側で助けることはできませんが、asp.netの場合、Generic Handler .ashxページを書くことができます. そこに既存のページを投稿し、そこから PHP の例と同じように応答を操作できます。

context.Response.ContentType = "application/csv"
context.Response.AddHeader("Content-Disposition", "attachment; filename=Whatever.csv")
context.Response.AddHeader ("content-length", YourPostedData.Length)
context.Response.Write(YourPostedData)
If context.Response.IsClientConnected Then
    context.Response.Flush()
End If
于 2012-11-15T22:31:39.983 に答える