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);
    }
});

ただし、根本的に異なる contentTypes であるため、同じ呼び出しで 2 つを別々のパラメーターとして組み合わせることはできないようです。

これは可能ですか?私はこれについて間違った方法で進んでいますか?どんな助けでも大歓迎です。

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 に答える