2013-11-11 4 views
0

Я пытаюсь привязать к классу при использовании WebMethod в приложении WebForms, но я получаю следующее сообщение об ошибке:Привязка к объекту при использовании WebForms WebMethods

{ "Message":"Invalidwebservicecall,missingvalueforparameter:\u0027dto\u0027.", "StackTrace":"atSystem.Web.Script.Services.WebServiceMethodData.CallMethod(Objecttarget,IDictionary2parameters) atSystem.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams(Objecttarget,IDictionary 2parameters) atSystem.Web.Script.Services .RestHandler.InvokeMethod (HttpContextcontext, WebServiceMethodDatamethodData, IDictionary`2rawParams) atSystem.Web.Script.Services.RestHandler.ExecuteWebServiceCall (HttpContextcontext, WebServiceMethodDatamethodData)», " ExceptionType": "System.InvalidOperationException" }

Однако Если я используйте 3 отдельных свойства строки, вызов успешно завершен без ошибок. Моя проблема заключается в том, что у объекта есть потенциально 20+ свойств, и я давно не знаком с сигнатурой метода (не говоря уже о том, что они могут легко измениться).

WebMethod

[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[System.ComponentModel.ToolboxItem(false)] 
[System.Web.Script.Services.ScriptService] 
public class FooService : System.Web.Services.WebService 
{ 
    [WebMethod] 
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
    public List<FooDTO> Test(FooDTO dto) 
    { 
     System.Diagnostics.Debug.Assert(dto != null, "Oops, the dto is null"); 
     return null; 
    } 
} 

JQuery используется для вызова метода

var dto = {}; 
dto.Test1 = 'Ticket Number'; 
dto.Test2 = 'Title'; 
dto.Test3 = true; 

$.ajax({ 
    url: '/service/FooService.asmx/Test', 
    data: JSON.stringify(dto), 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    type: 'POST', 
    success: function (data) { 
     alert('hooray!'); 
    }, 
    error: function (data) { 
     alert('NOPE'); 
    } 
}); 

ответ

0

Как насчет одного параметра; вы можете использовать библиотеку, такую ​​как JSON.NET, которая очень легко анализирует ее и снова преобразует обратно в объект; все, что вам нужно будет сделать, это убедиться, что оно перешло на сервер в виде строки, в которой эта строка является содержимым JSON.

0

удалить JSON.stringify, если вы используете метод столба

$.ajax({ 
    data: dto, 
    type: 'POST', 
    .... 
}); 
1

Вы должны создать еще один объект и добавить объект DTO как собственность. Обратите внимание, что свойство должно быть с тем же именем, что и ваш параметр, в веб-методе. объект

var data = {}; 
data.dto = dto; 

, а затем отправить ваши данные

$.ajax({ 
data: JSON.stringify(data), 
type: 'POST', 
.... 
Смежные вопросы