フォームがファイルを送信できるようにするには、ファイルをアップロードできるようにフォームに属性 enctype=multipart/form-data を指定する必要があることは誰もが知っています。enctype に関する記事はたくさんあるので、説明します。ここでは説明しません。
問題は、MVC の Html.BeginForm() がフォーム コードの出力に使用されることです。
@using (Html.BeginForm()) {
}
があります< in PartialView ;input type="file" /> はファイルのアップロードに使用されますが、この PartialView の親ページの Html.BeginForm() を変更したくありません。私のアプローチは、スクリプトを使用することです。 PartialView で enctype をフォームに追加します:
$(function(){
$('# file').parents('form').attr('enctype', 'multipart/form-data');
});
最近の主流のブラウザはテストに合格しましたか? 問題があるのは、少数の古いバージョンの IE だけであり、この問題を解決するために enctype を Html.BeginForm() に手動で追加してみました。つまり、問題は次のとおりです。上記のスクリプト。何度も検索した結果、IE6、7、および 8 では直接 attr('enctype', 'multipart/form-data') がサポートされておらず、dom 属性 encoding='multipart/form-data が設定されているために問題が発生することが最終的にわかりました。 ' と最終的なスクリプト コードを次のように変更します:
$(function () {
$('#file').parents('form').attr('enctype', 'multipart/form-data').get(0).encoding = 'マルチパート/フォームデータ'
});