0

Ajax を使用してクライアント側 JQuery から JSON 形式を ASP.net (C# コード ビハインド) に送信し、データを保存しようとしています。しかし、私はそうすることができませんでした。サーバー側でクライアント側のリクエストを処理する方法についてあまり知識がありません。

前もって感謝します!

私のコードは次のとおりです。

クライアント側:

$.ajax(
        {
            type: "POST",
            url: "Default.aspx/save",
            data: "{'data': " + JSON.stringify(prj) + "}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) {
            if (response.ok) {
                prof.stop();
                if (response.data) {
                    ge.loadProject(response.data); 
                } else {
                    ge.reset();
                }
            } else {
                var errMsg = "Errors saving project\n\n";
                if (response.message) {
                    errMsg = errMsg + response.message + "\n";
                }

                if (response.errorMessages.length) {
                    errMsg += response.errorMessages.join("\n");
                }

                alert(errMsg);
            }
        }

    });

コード ビハインドで JSON を処理することにあまり慣れていないので、いくつかのアプローチを試してみましたが、C# でエラー コード ビハインドが発生しました。

    [WebMethod]
    public static string save (object data)
    {

    //String s1 = data.ToString();
    //Dictionary<string, object> tmp = (Dictionary<string, object>)data;

    //DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(string));
    //MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(data));
    //string obj = (string)ser.ReadObject(ms);

    string s2 = data.ToString();
    GC.GClass g = new GC.GClass();
    g.Save(s2);
    return s2;
}

データをファイルとして保存するための GC.GClass コード:

namespace GC
 {
public class GClass
{
    string fileLoc = @"c:\Users\Pouria\Desktop\sample1.txt";



    public GClass()
    {

    }

    public void Save(string data)
    {
        FileStream fs = null;

        if (!File.Exists(fileLoc))
        {
            using (fs = File.Create(fileLoc))
            {
            }


            if (File.Exists(fileLoc))
            {
                using (StreamWriter sw = new StreamWriter(fileLoc))
                {
                    sw.Write(data);
                }
            }

        }
    }

}
}

私の応答と私のsample1.txtの私のファイルでは、これを出力として取得します:

 System.Collections.Generic.Dictionary`2[System.String,System.Object]

FireBug の画像をアップロードできませんでしたが、応答タブのメッセージは次のとおりです。

 {"d":"System.Collections.Generic.Dictionary`2[System.String,System.Object]"}

そしてJSONタブ:

 "System.Collections.Generic.Dictionary`2[System.String,System.Object]"
4

1 に答える 1

0

まず、プロジェクトにWebService1.asmxファイルを作成する必要があります。ファイルを作成したら、 WebService1.asmxファイルにメソッドを作成します。

[WebMethod]
public static string save (object data)
{

//String s1 = data.ToString();
//Dictionary<string, object> tmp = (Dictionary<string, object>)data;

//DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(string));
//MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(data));
//string obj = (string)ser.ReadObject(ms);

string s2 = data.ToString();
GC.GClass g = new GC.GClass();
g.Save(s2);
return s2;
}

脚本

$.ajax(
    {
        type: "POST",
        url: "WebService1.asmx/save",
        data: "{'data': " + JSON.stringify(prj) + "}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (response) {
        if (response.ok) {
            prof.stop();
            if (response.data) {
                ge.loadProject(response.data); 
            } else {
                ge.reset();
            }
        } else {
            var errMsg = "Errors saving project\n\n";
            if (response.message) {
                errMsg = errMsg + response.message + "\n";
            }

            if (response.errorMessages.length) {
                errMsg += response.errorMessages.join("\n");
            }

            alert(errMsg);
        }
    }

});

Saveメソッドにブレークポイントを設定して実行します。これを使えば問題は解決すると思います。

于 2013-07-25T04:53:51.390 に答える