2

我正在尝试将在 JavaScript 中创建的对象发送到 ASP.NET PageMethod。该对象反映了现有自定义业务对象的属性,因此我希望我可以传递单个对象而不是每个属性的参数。我在尝试使用此方法时收到错误“未知的 Web 方法 SavePart。

Javascript:

function() {
    var pt = { Id: 1, Onhand: 20, LowPoint: 30, __type: 'Custom.Objects.Part'};

    $.ajax({
        type: 'POST',
        url: 'partlist.aspx/SavePart',
        data: JSON.stringify(pt),
        contentType: 'application/json; charset: utf-8;'
        dataType: 'json',
        success: function(results) { alert('Success!'); }
    });
}

代码背后:

<WebMethod()> _
Public Shared Function SavePart(pt as Custom.Objects.Part) as Boolean
    Dim repo as new PartRepository()
    return repo.Save(pt)
End Function

我正在使用另一个只接受 int 的 PageMethod,这很好用。

4

3 回答 3

3

我最终通过 jQuery ajax 命令以这种方式发送对象来解决我的问题:

data: '{"pt":' + JSON.stringify(pt) + '}'

这会自动序列化对象并将其返回给我的 WebMethod。当我尝试按原样发​​送对象时,我收到一条错误消息,提示“无效的 JSON 原语”。

于 2010-02-23T11:58:04.657 回答
1

您正在尝试将字符串传递给该方法。您将需要接受该字符串,并使用 fx 对其进行反序列化。JavascriptSerializerJSON.NET

于 2010-02-22T20:34:31.063 回答
0

我知道这是非常古老的,但是当您使用它来找出问题所在时,它并不是很直观。您非常接近,但我想对此添加更多内容,以防其他人以后想做同样的事情。这也适用于嵌套对象,我可以说的一件事是 CASE 在您的 JS 变量中很重要,这些变量映射到页面方法上的 .NET POCO。

你的“答案”是我要开始的地方。就像下面的评论一样,是的,您必须传递包装在其页面方法变量中的对象name 。

再说一遍,这是区分大小写的,不仅会在对象的名称上绊倒你,还会在它的属性上绊倒你。因此,为了解决这个问题,我通常在 .NET 中创建我的 POCO 对象,然后将其复制到页面上,这样我就知道名称、大小写和所有内容都是正确的。像这样的东西:

POCO:

Public Class CustomObject
    Public Property Id as integer
    Public Property ReqDate as DateTime
    Public Property Message as string
End Sub

现在使用为页面方法定义的 POCO,完全按照 JS/AJAX 发布的方式复制该“模型”,并注意区分大小写。

function ParseAndPostData()
{
   var data = { custobj: {
                Id: 1, 
                ReqDate: "04/12/2018",
                Message:"Hello!" 
                }
           };
  //Stringify the data so it goes through page method parser
  var postdata = JSON.stringify(data);
  $.ajax({
         type: 'POST',
         url: '/BasePath/SomePage.aspx/SomeMethod',
         data: postdata,
         contentType: 'application/json; charset=utf-8',
         dataType: 'json',
         success: function (msg) {
              var parsedACData = JSON.parse(msg.d);
              alert(parsedACData);
             },
        error: function (msg) {
              alert(msg);
              }
  });
}

页面方法(注意参数中的custobj):

<WebMethod()> _
Public Shared Function PostCustomObject(custobj as CustomObject) as String
    return custobj.Message
End Function
于 2018-04-11T19:37:26.713 回答