Javascript 如何使用jQueryAjax将带有文件的模型发送到MVC控制器

Javascript 如何使用jQueryAjax将带有文件的模型发送到MVC控制器,javascript,jquery,ajax,asp.net-mvc,asp.net-mvc-5,Javascript,Jquery,Ajax,Asp.net Mvc,Asp.net Mvc 5,我正在重写一个页面,该页面将包含文件对象属性的模型发送到MVC控制器。该页面使用提交/回发方式传输模型。然而,我似乎无法正确地使用ajax调用来执行同样的操作。以下是我尝试过的两种方法。你知道为什么两者都不起作用吗 下面是第一种方法的javascript,我将file对象分配给model属性: var model = { itemId: $("#itemId").val(), itemDescription: $("#itemDescription").val(), fi

我正在重写一个页面,该页面将包含文件对象属性的模型发送到MVC控制器。该页面使用提交/回发方式传输模型。然而,我似乎无法正确地使用ajax调用来执行同样的操作。以下是我尝试过的两种方法。你知道为什么两者都不起作用吗

下面是第一种方法的javascript,我将file对象分配给model属性:

var model = {
    itemId: $("#itemId").val(),
    itemDescription: $("#itemDescription").val(),
    file: $("#attachment")[0].files[0]
}

$.ajax({
    url: 'Item/SaveItem',
    type: 'POST',
    contentType: false,
    cache: false,
    processData: false,
    data: model,
    async: true,
    success: function (data) {
        //did something good
    },
    error: function (xhr) {
        //did something bad
    }
});
以下是接收请求的MVC操作方法设置:

public ActionResult SaveItem(ItemModel model)
{
    SaveModel(model);
}
这里是我尝试过的另一种方法,我尝试将模型和文件作为单独的表单值发送:

var model = {
    itemId: $("#itemId").val(),
    itemDescription: $("#itemDescription").val()
}

var formData = new FormData();
    formData.append("model", JSON.stringify(model));
    formData.append("attachment", $("#attachment")[0].files[0]);

$.ajax({
    url: 'Item/SaveItem2',
    type: 'POST',
    contentType: "multipart/form-data",
    cache: false,
    processData: false,
    data: formData,
    async: true,
    success: function (data) {
        //did something good
    },
    error: function (xhr) {
        //did something bad
    }
});
下面是接收第二个请求的MVC操作方法:

public ActionResult SaveItem2(FormCollection form)
{
    var model = form["model"] as ItemModel;
    HttpPostedFileBase attachment = null;

    if (Request.Files.Count > 0)
    {
        attachment = Request.Files[0];
    }

    SaveModel(model);
}

可能会有帮助:@jason你是怎么解决的?