私は mvc 4 を使用しており、モデルの一部として複数のファイルを送信しようとしています。
私のフォームは次のようになります
<% using (Html.BeginForm("Edit", "Issue",FormMethod.Post, new {id = "issueForm", encType="multipart/form-data"})) %>
レンダリングする
<form id="issueForm" method="post" enctype="multipart/form-data" action="/Issue/Edit">
私の行動は次のようになります
[Authorize]
[HttpPost]
public ActionResult Edit(IssueViewModel viewmodel)
ビューモデルにはプロパティがあります
public IEnumerable<HttpPostedFileBase> Files { get; set; }
フォームには、次のようなファイルの入力が含まれています。
<input id="filesX" type="file" name="Files">
ここで、X は、JavaScript によって追加されたファイル ボックスの数の増分です。
私はフィドラーとファイアーバグを使用しましたが、リクエストでファイルが送信されていることを明確に確認できます。これは、コンテンツとファイル名。
Files プロパティを見ると、次のようになります。
そのため、実際のファイル データではなく、何らかの理由でファイル コレクションに null オブジェクトが取り込まれているように見えますが、これは奇妙です。モデル バインディングが機能しない場合、Files コレクション全体がその最初の項目ではなく null になると思います。
ここで何が起こっているかについてのアイデアはありますか?
編集: アクションメソッドのパラメーターとしてファイルを使用しようとしました(実際にはこの方法で開始しました)、ファイルの入力名の大文字と小文字を変更しようとしましたが、どちらも効果がありませんでした。
編集 2: IE では正常に送信されているようですが、Firefox や chrome では送信されていないようです
編集 3: FireFox/Chome では、X-Requested-With ヘッダーが「XMLHttpRequest」で送信されるようです。私たちが使用している ajaxform プラグインで何かおかしなことが起こっていて、送信を適切に行うための iframe を作成していないのではないかと思います
編集 4: 別のプロジェクトでほとんどのコードを再現しましたが、すべてが機能しているように見えますが、このシナリオでは奇妙なことが起こっているに違いない理由がわかりません。私が追跡できた唯一のことは、xmlhttprequest レベル 2 をサポートしていないブラウザでは、ファイルが正しくバインドされるように見えるということです。