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"}

私は、次のようなさまざまな方法で Web メソッドを使用しようとしましたが、これらに限定されません。

<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 に答える