【问题标题】:Knockout and Asp.net MVC sending json淘汰赛和 Asp.net MVC 发送 json
【发布时间】:2015-03-12 17:19:06
【问题描述】:

我尝试将 Knockout 模型发送到 Asp.net MVC,但我得到的只是空对象。 Fiddler 向我显示数据已正确发送。

// model
function ProductModel() {
var self = this;
self.Price = ko.observable();
self.Name = ko.observable("");
self.Description = ko.observable("");
self.Discount = ko.computed(function () {
    return self.Price() - ((15 * self.Price()) / 100);
});
}

// viewmodel

function ProductVM() {
var self = this;
self.Product = new ProductModel();
self.Products = ko.observableArray();
self.AddPrd = function () {

    self.Products.push(self.Product);
    dt.row.add([
        $("#ProductName").val(),
        $("#Description").val(),
        $("#Price").val(),
        $("#discount").val()
    ]).draw();

    self.Product = new ProductModel();  

}
self.submit = function () {
    var Data = JSON.stringify(ko.toJS(self.Products));
    console.log(Data);

    $.ajax({
        url: "/Home/AddMultiProducts",
        data: Data,
        type: 'POST',
        contentType: 'application/json',
        dataType: 'json'
    });     
}
}

c#模型:

    public class Product
    {
    public string Price { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public double Discount { get; set; }    
    }

c# 动作:

    [HttpPost]
    public ActionResult AddMultiProducts(Product prdlist)
    {...}

浏览器console.log中显示的发送对象: [{"价格":"334","名称":"fdgdfg","描述":"fdgdfg","折扣":283.9}]

任何想法都会很棒!

【问题讨论】:

  • 您的console.log 显示一个数组,但您的控制器操作需要单个 Product...
  • 似乎有些不对劲。为什么 AddMultiProducts 方法只接受一种产品?它不应该接受产品数组/列表吗?

标签: c# asp.net asp.net-mvc json knockout.js


【解决方案1】:

试试这个:

self.submit = function () {
    var Data = ko.toJS(self.Products)[0];
    console.log(JSON.stringify(Data));

    $.ajax({
        url: "/Home/AddMultiProducts",
        data: Data,
        type: 'POST',
    });     
}

您不需要将数据字符串化为 JSON 或使其成为 dataType json 请求。以上应该发布到行动就好了。与 cmets 状态一样,您希望控制器接收单个对象,而不是具有单个条目的数组。

【讨论】:

  • 谢谢!!我试过 var Data = ko.toJS(self.Products[0]);并且不明白为什么它不起作用......
  • @user1223457 ko.toJS(self.Products[0]) 不起作用,因为 self.Products 不是 javascript 数组,它是淘汰赛 observableArray。您必须先将其转换为普通的 javascript 数组,然后才能执行普通的 javascript 数组(如 [index].push(item) 等)
猜你喜欢
  • 2015-03-01
  • 1970-01-01
  • 2014-04-13
  • 2016-11-03
  • 2012-06-06
  • 2013-06-15
  • 2016-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多