У меня есть следующий JS
$('#Submit').click(function () {
var name = $('#Name').val();
var age = $('#Age').val();
var phonenumber = $('#PhoneNumber').val();
var isMale = $('#IsMale').val();
var formdata = "'formdata':{name:'" + name + "',age:'" + age + "',phonenumber:'" + phonenumber + "',ismale:'" + isMale + "'}";
$.ajax({
type: "Post",
url: "WebService/FormSubmission.asmx/SavePafForm",
data: formdata,
dataType: "json",
contentType: "application/json; charset=utf-8",
processdata: true,
success: function (msg) { alert(msg.d); },
error: function (result, errortype, exceptionobject) { alert('Error:' + result.responseText); }
})
У меня есть следующий метод asmx
[WebMethod]
public string SavePafForm(string formdata)
{
string test = formdata;
return test;
}
Я получаю следующую ошибку
Error:{"Message":"Invalid JSON primitive: \u0027{name:\u0027tim\u0027,age:\u0027\u0027,phonenumber:\u0027\u0027,ismale:\u0027on\u0027}\u0027.","StackTrace":" at System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)\r\n at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)\r\n at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input)\r\n at System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext context, JavaScriptSerializer serializer)\r\n at System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData, HttpContext context)\r\n at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.ArgumentException"}
Когда я меняю свойjson строка для этого
var formdata = "{name:'" + name + "',age:'" + age + "',phonenumber:'" + phonenumber + "',ismale:'" + isMale + "'}";
и мой веб-метод для получения этой подписи
public string SavePafForm(string name, string age, string phonenumber, string ismale)
Я не получаю никакой ошибки.
Моя цель - передать до 20 параметров этому методу ... Я хотел бы передать его как один объект, с которым я могу иметь дело, а не 20 параметров в сигнатуре метода.
Есть идеи?
РЕДАКТИРОВАТЬ: Делайте все, что отмеченный ответ сказал, кроме изменения вашего объекта json на стороне клиента, чтобы сделать это
var formdata = JSON.stringify({ formdata: { name: $('#Name').val(), age: $('#Age').val(), phonnumber: $('#PhoneNumber').val(), ismale: $('#IsMale').val()} });