偽のボタンを使用した隠しファイルの入力と、ブラウザの表示の一貫性のための入力があります。現在、元の入力も表示されており、それを使用してファイルをアップロードすると、すべて正常に動作することがわかりました。
ただし、「ダミーファイル」のボタンを使用して、JavaScript を介してクリックをトリガーすると、UI と同様に期待どおりに値が読み込まれます。しかし、今回送信をクリックすると、代わりに入力から値がクリアされ、他に何もしません。これは IE でのみ発生し、chrome では発生しません。これは、以前に質問した質問の問題の原因です: https://stackoverflow.com/questions/19275901/internet-explorer-specific-form-post-with-file-input-returning-empty-file-list。これは、その範囲を超えて関連するため、別の質問として質問します。
HTML (これは部分的なビューなので、さらに入力を追加してファイル コレクションを返すことができます。メイン ビューに引き出して、これと別のバグのために 0 をハードコーディングしました)。
<div class="control-group">
<label class="control-label" for='@String.Format("file{0}", 0)'>File</label>
<div class="controls">
<input type="file" name="files" class="hiddenFileInput" id='@String.Format("file{0}", 0)' />
<div class="dummyfile">
<input id="@String.Format("filename{0}", 0)" type="text" class="input disabled" name="filename" >
<button type="button" class="btn btn-primary">Choose</button>
</div>
</div>
</div>
jQuery:
function fileUploadControlInit() {
$('.dummyfile .btn').unbind("click").on("click", function (e) {
$(this).closest("div").siblings(" :file").trigger('click');
});
$('.hiddenFileInput').on("change", function (e) {
var val = $(this).val();
var file = val.split(/[\\/]/);
var fileName = file[file.length - 1];
$(this).siblings("div").children(" :text").val(fileName);
$("#UploadFile").prop('disabled', false);
});
}