ko.toJSON()在MVC中工作,但在asp.net FORM app" {item:" + ko.toJSON(产品)+"}"工作中

时间:2013-09-03 13:07:56

标签: javascript asp.net asp.net-mvc knockout.js

我是淘汰js的新手,我想在cloud.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), 

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

它开始调用web方法。

这是我的网络方法

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

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

2 个答案:

答案 0 :(得分:2)

它只是关于Web表单和MVC中的不同机制。 在Asp.NET Web表单中,因为Page Method' Update'有参数' item'它期待一个带有'项目的JSON对象。因此必须以{" item":complexObj}的形式构造json对象。 对于ASP.NET MVC也是如此,但此外,还有"数据:ko.toJSON(产品)"正在努力,因为有一个价值提供者'工厂使用Action Methods Signature来确定我们期望的Type,并尝试将它收到的输入(从POST)转换为该Type。这一切都发生在MVC的绑定逻辑中。

答案 1 :(得分:0)

一种选择就是改变你的WebMethod:

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