いくつかの単純な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個のパラメーターを使用するメソッドは必要ありません。どんな助けでも大歓迎です。
このプロジェクトをすばやく設定し、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; }
}
ここ からプロジェクトを取得できます。また、フィドラーまたはChromeを使用してAJAXのリクエスト/レスポンスを監視してください。 Chromeを使用してAJAXリクエストを監視する方法を示す画像を追加しました。 Fiddlerはさらに優れており、より詳細です。