Вы можете клонировать фактический ввод файла.Вот пример:
Модель:
public class MyViewModel
{
public IEnumerable<HttpPostedFileBase> Files { get; set; }
}
Контроллер:
public class HomeController : Controller
{
public ActionResult Index()
{
return View(new MyViewModel());
}
[HttpPost]
public ActionResult Index(MyViewModel model)
{
return View(model);
}
}
Вид:
@model MyViewModel
<script type="text/javascript">
$(function () {
$(':file').change(function () {
if (this.files.length > 0) {
var real = $(this);
var cloned = real.clone(true);
real.hide();
cloned.insertAfter(real);
real.appendTo('form');
}
});
});
</script>
@Html.TextBoxFor(x => x.Files, new { type = "file", multiple = "multiple", value = "", id = (string)null })
@using (Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<button type="submit">Upload</button>
}
Идея состоит в том, что исходный файлвход за пределами формы.Затем каждый раз, когда пользователь выполняет выбор файла, мы клонируем поле и вставляем его в форму как ввод скрытого файла.Когда форма отправлена, все файлы будут загружены на сервер.
Дальнейшее усовершенствование сценария, очевидно, будет заключаться в предоставлении пользователю визуальной индикации количества файлов, которые будут загружены на сервер.сервер.