【发布时间】:2011-06-30 04:00:33
【问题描述】:
我有以下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()} });
【问题讨论】: