c# - Post 敲除数组到 IEnumerable 对象

c# - Post knockout array to an IEnumerable object

我真的很菜鸟。 我正在使用 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; }

}

这是文件的模型。

首先我将文件保存到 DB 和 return 插入的 ID,我想将该 ID 保存在 VDenuncia 中,但不知道如何开发它。

我正在使用 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(),
    })
};

解决方案:

给出的解决方案有效,但我意识到我正在使用数组并且我只更改了接下来的数据:

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

您应该解开对象中的可观察对象,然后将您的 javascript 对象字符串化为 JSON。

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

var payload = ko.mapping.toJS(data); //unwrap your observables

然后在您的 ajax 请求中将类型设置为 json,并使用 JSON.stringify(payload)payload 转换为 JSON,如下所示:

var ajaxOptions = {
                url: 'Home/Save',
                data: JSON.stringify(payload),
                type: "POST",
                dataType: "json",
            };