Javascript 通过AJAX发送文件时,如何向文件添加属性?

Javascript 通过AJAX发送文件时,如何向文件添加属性?,javascript,jquery,asp.net-mvc,Javascript,Jquery,Asp.net Mvc,我有一个MVC应用程序,我正在应用程序中上传图片文件 此操作的代码: var files = $(".uploadFile").data("files"); $.each(files, function (key, value) { data.append('file', value); }) $('.userForm *').filter(':input').ea

我有一个MVC应用程序,我正在应用程序中上传图片文件

此操作的代码:

            var files = $(".uploadFile").data("files");

            $.each(files, function (key, value) {
                data.append('file', value);
            })

            $('.userForm *').filter(':input').each(function (index, value) {
                data.append(value.id, $("#" + value.id).val());
            });

            $.ajax({
                url: "/Customer/AddCustomer",
                type: 'POST',
                data: data,
                cache: false,
                processData: false,
                contentType: false,
                success: function (data) {
                // logic  
                 $.LoadingOverlay("hide");
                },
                error: function (event, jqxhr, settings, thrownError) {
                   // logic
                    $.LoadingOverlay("hide");
                }
            });
服务器代码:

   public string AddCustomer(HttpPostedFileBase file, Customer customer)
    {

        // add customer and return to edit view
        return partialView("customerEdit");
    } 
我正在尝试找出如何向发送的每个文件添加属性? 例如,对于我添加的每个文件,我都会创建一个列表,并将其附加到DOM中。 在此列表中,每个文件旁边都有一个复选框,用于指示此文件(图片)是否应为配置文件图片


如何将boelan属性附加到每个文件?

多亏了@adeneo,我的大脑才得以快速启动

我不得不在这里重新考虑我的策略,因为我不想把额外的参数作为一个具体的字符串发送

我做了以下工作:

在我的第一篇文章中,我发送了文件和客户数据。我将客户保存在数据库中,对于文件,我将其存储在tempdata中,以便能够在我的第二篇文章中访问它,我将使用指定的额外参数将文件保存到数据库中

脚本:

                $.ajax({
                    url: "/Customer/AddCustomer",
                    type: 'POST',
                    data: data,
                    cache: false,
                    processData: false,
                    contentType: false,
                    success: function (data) {

                        // "Pictures" is an array that contains objects with all the file names and other properties.
                        $.ajax({
                            url: "/Customer/AddCustomerPictures",
                            type: 'POST',
                            data: JSON.stringify({ pictureFiles: Pictures}),
                            contentType: 'application/json; charset=utf-8',
                            success: function(data) {

                                //logic
                            }
                        });

                        //logic
                    },
                    error: function (event, jqxhr, settings, thrownError) {
                   //logic

                    }
                });
服务器代码,注意不包括整个soloution:

    public ActionResult AddCustomer(CustomerM customer)
    {

       var Id =  _iScissorFingersManager.AddCustomer(customer.FirstName, customer.LastName, customer.Email,customer.PhoenNumber);

        if (Request.Files.Count != 0)
        {
            TempData["files"] = Request.Files;
            TempData["Id"] = Id;
        }
        // add customer and return to edit view

        return PartialView("CustomerEdit", customer);

    }

    public ActionResult AddCustomerPictures(List<PictureFiles> pictureFiles)
    {
        var files = (HttpFileCollectionBase)TempData["files"];
        var id = (long) TempData["Id"];

        if (files != null)
        {
            foreach (var p in pictureFiles)
            {
                for (int i = 0; i < files.Count; i++)
                {
                    HttpPostedFileBase hpf = files[i];
                   p.Name == files[i].FileName && p.IsProfile ? _iScissorFingersManager.UploadCustomerPictures(hpf.InputStream, hpf.ContentType, id, true), _iScissorFingersManager.UploadCustomerPictures(hpf.InputStream, hpf.ContentType, id);

                }
            }

        }

        return PartialView("CustomerProfileImage");
    }
public ActionResult AddCustomer(CustomerM customer)
{
var Id=_iScissorFingersManager.AddCustomer(customer.FirstName、customer.LastName、customer.Email、customer.PhoenNumber);
如果(Request.Files.Count!=0)
{
TempData[“files”]=Request.files;
TempData[“Id”]=Id;
}
//添加客户并返回编辑视图
返回PartialView(“CustomerEdit”,客户);
}
公共操作结果添加自定义图片(列表图片文件)
{
var files=(HttpFileCollectionBase)TempData[“files”];
变量id=(长)TempData[“id”];
如果(文件!=null)
{
foreach(pictureFiles中的var p)
{
对于(int i=0;i
您可以使用
data.append('key','value')
将更多数据附加到FormData对象,例如,将文件名作为键,将布尔值作为值。我将尝试这样做,但我担心如何接收它?我接受一个模型作为具有特定属性的第二个参数。正如我说的,我会尝试它,但我有一些小疑问你必须构建你的后端来接收你发送的数据,否则它将如何工作?我现在不能构建后端模型,使其具有与picturefile相同的名称,可以吗?这是动态的,为什么不呢?您没有听说过连接,例如
data.append('is\u profile'+file.name,true)