1

我正在尝试将客户端发布到以下 MVC 操作方法:

[HttpPost]
public void Create(ProductModel product, HttpPostedFileBase imageFile)
{
    productServices.AddProduct(product, imageFile);
}

使用 type="submit" 按钮很简单,但是在我的特殊情况下,我需要使用 ajax 调用来完成。

我可以很容易地将 ProductModel 作为 JSON 传递。

$.ajax({
    url: '/Product/Create',
    type: 'POST',
    data: JSON.stringify({product: {
            Id: 1,
            Name: "SomeName"
        }
    }),
    contentType: 'application/json; charset=utf-8',
    success: function (data) {
        alert("Product Created!");
    }
});

我也可以将文件作为 FormData 传递

var imageFileData = new FormData();
imageFileData.append('imageFile', myFileObject);

$.ajax({
    url: '/Product/Create',
    data: imageFileData,
    cache: false,
    contentType: false,
    processData: false,
    type: 'POST',
    success: function (data) {
        alert(data);
    }
});

但是,我似乎无法在同一个调用中将 2 组合为单独的参数,因为它们是根本不同的 contentTypes。

这可能吗?我会以错误的方式解决这个问题吗?任何帮助,将不胜感激。

4

1 回答 1

2

您可以像添加文件一样将 json 添加到 FormData

var imageFileData = new FormData();
imageFileData.append('imageFile', myFileObject);
imageFileData.append('product', JSON.stringify({product: {
            Id: 1,
            Name: "SomeName"
        });

$.ajax({
    url: '/Product/Create',
    data: imageFileData,
    cache: false,
    contentType: false,
    processData: false,
    type: 'POST',
    success: function (data) {
        alert(data);
    }
});

你们可以将表单本身添加到 FormData

$.ajax({
    url: '/Product/Create',
    data: new FormData(theFormElement),
    cache: false,
    contentType: false,
    processData: false,
    type: 'POST',
    success: function (data) {
        alert(data);
    }
});
于 2012-08-23T22:54:15.357 回答