Javascript ko.toJSON()在MVC中工作,但在asp.net表单应用程序中;{项目:“ko.toJSON(产品)”项目;正在工作

Javascript ko.toJSON()在MVC中工作,但在asp.net表单应用程序中;{项目:“ko.toJSON(产品)”项目;正在工作,javascript,asp.net,asp.net-mvc,knockout.js,Javascript,Asp.net,Asp.net Mvc,Knockout.js,我不熟悉knockout js,我想在asp.net表单应用程序中使用knockout.js。我想使用ajax调用更新实体,如下所示 // Update product details self.update = function () { var Product = self.Product(); $.ajax({ url: 'SProduct.aspx/Updat

我不熟悉knockout js,我想在asp.net表单应用程序中使用knockout.js。我想使用ajax调用更新实体,如下所示

// Update product details
            self.update = function () {
                var Product = self.Product();

                $.ajax({
                    url: 'SProduct.aspx/Update',
                    cache: false,
                    type: 'POST',
                    contentType: 'application/json; charset=utf-8',
                    data: ko.toJSON(Product),
                    success: function (data) {
                        alert("success");
                        self.Products.removeAll();
                        self.Products(data); //Put the response in ObservableArray
                        self.Product(null);
                        alert("Record Updated Successfully");
                    },
                    error: function (data) {
                        console.log(data);
                    }
                })

            }
它不起作用,但如果我改变

 data: ko.toJSON(Product), 
进入

它开始调用web方法

这是我的web方法

 [WebMethod]
    public static bool Update(Product item)
    {
        Product p = new Product();
        return true;
    }

还有一件事我想提一下,ko.toJSON()在asp.NETMVC应用程序中工作

这只是web表单和MVC中的不同机制。 在Asp.NET Web表单中,由于页面方法“Update”具有参数“item”,因此它需要一个具有“item”属性的JSON对象,因此必须以{“item”:complexObj}的形式构造JSON对象。
对于ASP.NET MVC也是如此,但除此之外,“data:ko.toJSON(Product)”也起作用,因为有一个“值提供者”工厂,它使用动作方法签名来确定我们期望的类型,并尝试将它接收到的输入(从POST)转换为该类型。这一切都发生在MVC的绑定逻辑中。

一个选项是只更改WebMethod:

[WebMethod]
    public static bool Update(Product product)
    {
        Product p = new Product();
        return true;
   }

您是否尝试在WebAPI中添加属性[FromBody]?我应该在哪里提到这一点?我正在使用asp.net web方法。公共静态bool更新([FromBody]产品项)可能会起作用。否则,您可以使用Fiddler查看您的请求,如果数据的提交方式有任何问题,它将显示在那里。[FromBody]这是抛出错误,找不到类型或命名空间名称“FromBody”(是否缺少using指令或程序集引用?)您可以在上阅读更多关于属性的信息。在asp.NETWebForm应用程序中不可能以任何方式执行此“data:ko.toJSON(Product)”吗?据我所知,由于我上面所写的内容,不可能,但为什么语法数据:“{item:”+ko.toJSON(Product)+“}”对您不方便?或者你只是好奇?如果我没有办法坚持下去,如果有任何方法我愿意坚持下去。谢谢你抽出时间。如果您发现任何与此相关的内容,请在此处更新您的答案或评论。再次感谢。嘿,伙计,你发布了与我相同的内容,请告诉我我需要更改什么?只需在不同的产品之间更改传递给更新功能的产品对象的名称
[WebMethod]
    public static bool Update(Product product)
    {
        Product p = new Product();
        return true;
   }