【问题标题】:c# - Post knockout array to an IEnumerable objectc# - 将敲除数组发布到 IEnumerable 对象
【发布时间】:2016-09-28 20:42:26
【问题描述】:

我真的不擅长这个。 我正在使用淘汰赛将数据从前端保存到后端。我想要做的是将敲除数组保存到 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,我想将该 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(),
}]

【问题讨论】:

  • 你能分享你在 HomeController 中的“保存”操作吗?
  • 当然,我已经编辑了我的问题
  • 邮政编码,而不是它的图像。 data 的值是多少。如果格式正确,它将很好地绑定(但很可能您需要对数据进行字符串化并使用contentType: 'json'
  • 有数据的内容,我想我做的一切都好,但不工作
  • data: { denuncia: data },更改为JSON.stringify({ denuncia: data })并添加contentType: 'json',

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


【解决方案1】:

您应该解开对象中的 observables,然后将您的 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",
            };

【讨论】:

  • 这不起作用,问题出在 ajax 发送数据时,我在 mvc 包装中收到但在对象文件中显示“null”
  • @JonathanAxel 将属性 'File' 的 byte[] 类型更改为 'HttpPostedFileBase' (google that),然后将该对象中的流读入字节。但是,如果您希望通过 ajax 上传文件,您可能需要查看 jquery-blueimp 插件以实现多浏览器支持。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-18
  • 1970-01-01
  • 2019-10-17
  • 2013-02-12
  • 2017-10-21
  • 1970-01-01
  • 2014-09-23
相关资源
最近更新 更多