Javascript 如何使用jQueryAjax将带有文件的模型发送到MVC控制器
我正在重写一个页面,该页面将包含文件对象属性的模型发送到MVC控制器。该页面使用提交/回发方式传输模型。然而,我似乎无法正确地使用ajax调用来执行同样的操作。以下是我尝试过的两种方法。你知道为什么两者都不起作用吗 下面是第一种方法的javascript,我将file对象分配给model属性: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
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你是怎么解决的?