asp .net mvc中的FormData,包含文件上传和其他数据而不是文件

时间:2016-06-26 20:22:28

标签: c# jquery ajax asp.net-mvc

我正在尝试使用FormData为我的数据库中的特定项目上传asp .net mvc中的图像。为此,我需要在图像中发送数据库中项目的ID以将图像链接到。

我需要使用FormData,因为我需要不刷新页面。所以我使用jquery为图像添加ajax。

我使用formdata.append添加了图像的id,但是在服务器中出现错误,告诉我在执行ajax请求时调用的方法的id参数不可为空,因此不能映射。它应该映射到我前面提到的数据库中项目的id。

但我在表单数据中添加了项目的ID。

这是我的javascript代码:

var formData = new FormData();
var totalFiles = document.getElementById("inputImage").files.length;
formData.append("categoryId", response.data.toString());
for (var i = 0; i < totalFiles; i++) {
    var file = document.getElementById("inputImage").files[i];
    formData.append("categoryImage", file);
}
$.ajax("@Url.Action("SaveCategoryImage", "Categories")",
{
    type: "POST",
    dataType: "JSON",
    data: formData,
    contentType: false,
    processData: false,
    headers: { __RequestVerificationToken: $('input[name=__RequestVerificationToken]').val() }
});

这是控制器中应该被调用的方法:

public async Task<ActionResult> SaveCategoryImage(long cateogoryId, HttpPostedFileBase image)
{
    return new JsonNetResult(new BasicActionResultViewModel {IsSuccessful = true});
}

那么为什么asp .net mvc将我在表单数据中发送的id映射到控制器方法中的id?

1 个答案:

答案 0 :(得分:0)

事实证明我做了一个拼写错误,表单数据中categoryId的键与控制器中方法中的键不同。我还从ajax调用中删除了数据类型。