0

我是淘汰 js 的新手,我想将 knockout.js 与 asp.net 表单应用程序一起使用。我想使用 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), 

进入

data:"{item:" + ko.toJSON(Product) + "}",

它开始调用 web 方法。

这是我的网络方法

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

还有一件事我想提到 ko.toJSON() 在 asp.net mvc 应用程序中工作。

4

2 回答 2

2

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

于 2013-09-03T16:02:30.487 回答
0

一种选择是只更改您的 WebMethod:

[WebMethod]
    public static bool Update(Product product)
    {
        Product p = new Product();
        return true;
   }
于 2013-09-03T18:39:28.857 回答