0

我正在尝试通过单击按钮从表单中获取数据,并将其发送到我后面代码中的 Web 方法。我想将它作为 JSON 对象传递,或者至少我认为这是惯例?这是我当前的代码,但它会产生错误(显示在代码下方)。

$("#addTask")
    .click(function( event ) {
    var newTask = new Object();
        newTask.TaskName = $('#ctl00_ContentArea_taskName').val();
        newTask.TaskDescription = $('#ctl00_ContentArea_taskDescription').val();
        newTask.SQLObjectID = $('#ctl00_ContentArea_sqlReportingID').val();
        newTask.WarehouseSQLObjectID = $('#ctl00_ContentArea_warehouseSQLObjectID').val();

        $.ajax({
           type: "POST",
           url: 'AddTask.aspx/validateTask',
           data: JSON.stringify(newTask),
           contentType: "application/json; charset=utf-8",
           dataType: "json",
           async: false,
           success : function(data) { 
                alert( data.d ); 
           }
        });  
    });

__

{"Message":"Invalid web service call, missing value for parameter: \u0027newTask\u0027.","StackTrace":"   at System.Web.Script.Services.WebServiceMethodData.CallMethod(Object target, IDictionary`2 parameters)\r\n   at System.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams(Object target, IDictionary`2 parameters)\r\n   at System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext context, WebServiceMethodData methodData, IDictionary`2 rawParams)\r\n   at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.InvalidOperationException"}

我尝试以多种不同的方式使用我的网络方法,例如但不限于:

<System.Web.Services.WebMethod()> _
Public Shared Function validateTask(ByVal newTask As TaskBO)

或者将一堆单独的参数作为字符串。

完成我想做的事情的正确方法是什么?我对格式化 JSON 对象有什么不明白的地方?

谢谢你的帮助!

4

2 回答 2

2

Web 服务需要一个带有键“newTask”的项目(如您的方法的参数所示)。您的请求将被发送为:

{
    "TaskName": "stuff",
    "TaskDescription": "stuff",
    "SQLObjectID": "stuff",
    "WarehouseSQLObjectID": "stuff"
}

但你真的需要它是:

{
    "newTask": {
        "TaskName": "stuff",
        "TaskDescription": "stuff",
        "SQLObjectID": "stuff",
        "WarehouseSQLObjectID": "stuff"
    }
}

因此,将您的$.ajax()电话更改为:

data: JSON.stringify({
    newTask: newTask
}),
contentType: "application/json; charset=utf-8",
于 2013-07-19T18:26:50.260 回答
0
  • 如果您为此代码使用单独的 js 文件,请验证客户端 ID

  • 如果newTask的类上有更多属性,您始终可以使用delete运算符从 json 对象中排除不必要的属性。(例如:delete newTask.UnnecessaryProperty)

于 2013-07-19T18:21:03.343 回答