c# - 将knockout数组发布到IEnumerable对象

时间:2016-05-31 01:21:46

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

我真的很棒。 我使用knockout来保存从前端到后端的数据。我想要做的是将敲除数组保存到c#

中的IEnumerable对象
public class VDenuncia
{
    public int IdDenuncia { get; set; }
    public string Name{ get; set; }
    public string LastName { get; set; }
    public string FirstName { get; set; }
    public IEnumerable<VFiles> Files { get; set; }
}

如下所示,这是我的模型

public class VFiles
{
    public int IdFile { get; set; }
    public byte[] File { get; set; }
    public string Extension { get; set; }

}

这是文件的模型。

首先我将文件保存到数据库并返回插入的ID,我想在VDenuncia中保存该ID,但不知道如何开发它。

我使用ajax转到JS转到C#但是当将observableArray转换为IEnumerable时没有得到C#中的任何对象

$.ajax({
            type: 'POST',
            url: 'Home/Save',
            data: { denuncia: data },
            async: true,
            success: function (data) {

从HomeController保存操作

[HttpPost]
    public async Task<JsonResult> Save(VDenuncia denuncia)
    {
        var manager = new DenunciaManager();
        var result = await manager.SaveDenuncia(denuncia);

        return new JsonResult
        {
            Data = result.Folio,
            MaxJsonLength = int.MaxValue,
            JsonRequestBehavior = JsonRequestBehavior.AllowGet
        };
    }

这是数据的价值。

var data = {
  Name: self.Name(),
  LastName: self.LastName(),
  FirstName: self.FirstName(),
  Files: ({
      IdFile: self.IdFile(),
      File: self.File(),
      Extension: self.Extension(),
    })
};

SOLUTION:

给出的解决方案有效,但我意识到我正在使用数组,我只更改下一个数据:

Files: [{
  IdFile: self.IdFile(),
  File: self.File(),
  Extension: self.Extension(),
}]

1 个答案:

答案 0 :(得分:0)

您应该打开对象中的observable,然后将您的javascript对象字符串化为JSON。

使用ko.mapping模块轻松地解开你的javascript对象:

add_image_size()

然后在ajax请求中将类型设置为json,并使用var payload = ko.mapping.toJS(data); //unwrap your observables payload转换为JSON,如下所示:

JSON.stringify(payload)