繁体   English   中英

在formdata中传递数组object

[英]Pass array object inside formdata

我有一个数组里面的数组每个 object 都有文件 object 例如 [ { file:fileObject, Description:string }, { file:fileObject, Description: string } ] 我如何在 formdata 和 Z594C103F2C6E04C4B66Z 中传递这个数组表单数据

如果您通过 ajax发布数据,您首先需要了解以下两件事:

1.对于复杂类型的每个属性,model 绑定在源中查找名称模式prefix.property_name 如果没有找到,它只查找不带prefixproperty_name 。对于model您在后端收到的是一个列表,您需要给出如下名称: [index].FormFilemodel[index].FormFile

2.Your model has a IFormFile and your action receives a list model,if you only pass the IFormFile you need remove FromForm attribute and be sure do not have [ApiController] is a known github issue and this has been moved to Next sprint planning里程碑。

这是一个完整的工作演示:

Model:

public class FileModels
{
    public string Description { get; set; }

    public IFormFile FormFile { get; set; }
}

看法:

<input type="file" multiple onchange="saveDocuments(this.files)"/>
<div class="form-group">
    <input type="button" value="Submit" id="submit" class="btn btn-primary" />
</div>

@section Scripts
{
    <script>
        function saveDocuments(documentList) {
            if (documentList.length > 0) {
                var form = new FormData();
                for (var i = 0; i < documentList.length; i++) {                    
                    var file = documentList[i];                    
                    form.append('model['+i+'].FormFile', file);
                }
                savePhysicalFile(form);
            }
        }    
        function savePhysicalFile(formData) {
            if (formData != null) {
                $.ajax({
                    url: "/Home/Save",
                    type: 'POST',
                    dataType: "json",
                    contentType: "multipart/form-data",
                    data: formData,
                    processData: false,
                    contentType: false,
                    success: function (result) {
                        console.log("Success", result);
                    },
                    error: function (data) {
                        console.log(data);
                    }
                });
            }
        }
    </script>
}

Controller:

[HttpPost]
public void Save(List<FileModels> model)
{
    //...
}

结果: 在此处输入图像描述

如果您通过表单提交发布数据,这是一个完整的工作演示:

@model FileModels
<form asp-action="Save" method="post" enctype="multipart/form-data">
    @for (int i = 0; i < 3; i++)
    {
        <div>
            <input type="text" asp-for="Description" name="[@i].Description" />
        </div>
        <div>
            <input type="file" asp-for="FormFile" name="[@i].FormFile" />
        </div>
       
    }
    <div class="form-group">
        <input type="submit" value="Submit" id="submit" class="btn btn-primary" />
    </div>
</form>

Controller:

[HttpPost]
public void Save(List<FileModels> model)
{
    //...
}

结果2:

在此处输入图像描述

我在 formdata 键中有绑定索引 Like Formdata[0][file]= file object Formdata[0][description]= Description

但 controller 没有从 formdata 中获取价值

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM