web-dev-qa-db-ja.com

JSONを使用して、jQueryからASP.NETWebmethodにユーザー定義オブジェクトを渡します

いくつかの単純なJSONをjQueryからASP.NET4.5Webメソッドに渡そうとしています。そして、それは私が望むようにはうまく機能していません。入力を個別のパラメーターとして受け入れると機能します。

[WebMethod]
public static Address GetJSonAddress(string name, string street)

しかし、それをオブジェクトとして受け取ろうとすると、それは機能しません。渡されるものは単にnullです。

[WebMethod]
public static Address GetJSonAddress(Address newAddress)

DataContractJsonSerializerを使用してWebmethods、Pagemethods、WCFを試しました...何もしません。 Addressクラスは、Datamember/DataContractで適切に装飾されています。プロパティは大文字と小文字を含めて一致します。

JQueryは、Addressオブジェクトでデータをラップするなど、あらゆる方法でデータを渡そうとしました... Webメソッドが呼び出されず、エラー500が発生する以外の方法でデータを渡した場合:

Save2 = function () {
var address = { prefix: GLOBALS.curr_prefix };

$('input[id^=' + GLOBALS.curr_prefix + '],select[id^=' + GLOBALS.curr_prefix + ']').each(function () {
       address[this.id.substr(4)] = $.trim($(this).val());
})

$.ajax({
    type: "POST",
    contentType: "application/json; charset=utf-8",
    url: "/WebServices/Insert",
    data: JSON.stringify(address),
    dataType: "json",
    success: function (data, textStatus) {
        console.log(data, textStatus);
    },
    failure: function (errMsg) {
        MsgDialog(errMsg);
    }
});
}

最終的には、121個の入力文字列を使用してこれを実行する必要があり、121個のパラメーターを使用するメソッドは必要ありません。どんな助けでも大歓迎です。

12
Thomas O.

このプロジェクトをすばやく設定し、Webメソッドを正常に呼び出すことができました。それに応じて、コードを調整してください。 クラスのプロパティ名がJavaScriptを介して渡すものと同じであることを確認してください。

Webサービス

    public static Contact getContact(Contact cnt)
    {
        cnt.name = "Abijeet Patro";
        cnt.phone = "Blah Blah";
        return cnt;
    }

JavaScript/jQuery

    $(document).ready(function () {
        var cnt = {name:'Hello',phone:'Hello'};
        $.ajax({
            type: "POST",
            url: "/Default.aspx/getContact",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            data: JSON.stringify({'cnt':cnt}), // Check this call.
            success: function (data) {
                debugger;
            }
        });
    });

クラス

public class Contact
{
    public string name { get; set; }
    public string phone { get; set; }
}

Web Service Called


enter image description here

ここ からプロジェクトを取得できます。また、フィドラーまたはChromeを使用してAJAXのリクエスト/レスポンスを監視してください。 Chromeを使用してAJAXリクエストを監視する方法を示す画像を追加しました。 Fiddlerはさらに優れており、より詳細です。


enter image description here

41
Abijeet Patro