我是淘汰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应用程序中工作。
答案 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;
}