Я знаю, что это невероятно старо, но не очень интуитивно понятно, когда вы используете это, чтобы выяснить, в чем заключаются проблемы. Вы очень близки, но я хотел бы добавить еще кое-что на тот случай, если кто-то позже захочет сделать то же самое. Это работает и с вложенными объектами, я могу сказать лишь одно: CASE имеет значение в ваших переменных JS, которые отображаются на .NET POCO в методе page.
Я начну с вашего "ответа". И, как в комментариях ниже, да, вы должны передать объект , заключенный в имя переменной метода страницы .
Скажу еще раз, это CASE-Sensitive и может сбить вас с толку не только по имени объекта , но и по его свойствам. Поэтому, чтобы бороться с этим, я обычно создаю свой объект POCO в .NET, затем копирую его на страницу, чтобы я знал имена, заглавные буквы и все они были правильными.
Примерно так:
ПОКО:
Public Class CustomObject
Public Property Id as integer
Public Property ReqDate as DateTime
Public Property Message as string
End Sub
Теперь, с определенным методом POCO для страницы, скопируйте эту «модель» в точности так, как это делает JS / AJAX для публикации, следя за чувствительностью к регистру.
function ParseAndPostData()
{
var data = { custobj: {
Id: 1,
ReqDate: "04/12/2018",
Message:"Hello!"
}
};
//Stringify the data so it goes through page method parser
var postdata = JSON.stringify(data);
$.ajax({
type: 'POST',
url: '/BasePath/SomePage.aspx/SomeMethod',
data: postdata,
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (msg) {
var parsedACData = JSON.parse(msg.d);
alert(parsedACData);
},
error: function (msg) {
alert(msg);
}
});
}
Метод страницы (примечание custobj в параметрах):
<WebMethod()> _
Public Shared Function PostCustomObject(custobj as CustomObject) as String
return custobj.Message
End Function