Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 敲除和Asp.net MVC发送json_C#_Asp.net_Asp.net Mvc_Json_Knockout.js - Fatal编程技术网

C# 敲除和Asp.net MVC发送json

C# 敲除和Asp.net MVC发送json,c#,asp.net,asp.net-mvc,json,knockout.js,C#,Asp.net,Asp.net Mvc,Json,Knockout.js,我尝试将淘汰模型发送到Asp.NETMVC,但得到的只是空对象。Fiddler告诉我数据是否正确发送 // model function ProductModel() { var self = this; self.Price = ko.observable(); self.Name = ko.observable(""); self.Description = ko.observable(""); self.Discount = ko.computed(function () { re

我尝试将淘汰模型发送到Asp.NETMVC,但得到的只是空对象。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#模型:

c行动:

按浏览器控制台中的显示发送的对象。日志: [{“价格”:“334”,“名称”:“fdgdfg”,“说明”:“fdgdfg”,“折扣”:283.9}]

任何想法都很好

试试这个:

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

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

您不需要将数据字符串化为JSON或使其成为数据类型JSON请求。上面的内容应该可以发布到行动中。与注释状态一样,您希望控制器接收单个对象,而不是具有单个条目的数组。

您的
控制台。log
显示了一个数组,但控制器的操作使用了单个
产品
…有些不对劲。为什么该方法添加多个产品,但只接受一个产品?它不应该接受一系列产品吗?谢谢!!我尝试了var Data=ko.toJS(self.Products[0]);我不明白它为什么不起作用…@user1223457
ko.toJS(self.Products[0])
不起作用,因为self.Products不是javascript数组,它是一个淘汰
observearray
。您必须先将其转换为普通javascript数组,然后才能执行普通javascript数组操作(如
[index]
.push(item)
,等等)
    [HttpPost]
    public ActionResult AddMultiProducts(Product prdlist)
    {...}
self.submit = function () {
    var Data = ko.toJS(self.Products)[0];
    console.log(JSON.stringify(Data));

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