Вот код, который я использовал на своем сайте для загрузки нескольких изображений:
ОК, это простой пример того, как это сделать. Конечный результат:
![enter image description here](https://i.stack.imgur.com/NMqYG.jpg)
HTML-разметка представляет собой простую форму с кнопкой отправки.
@using (Html.BeginForm("Create", "Product", FormMethod.Post, new { enctype = "multipart/form-data" })) {
@Html.ValidationSummary()
<div class="form-field">
<p>Select pictures:</p>
<div class="upload-container">
<div class="upload">
<input type="file" name="files" id="file1" />
<img src="@Url.Content("~/Public/images/delete.png")" alt="Remove picture." />
</div>
</div>
</div>
<div class="form-field">
<input type="submit" value="Create" />
</div>
}
Нам также нужно немного магии jQuery, чтобы каждый раз, когда кто-то добавляет изображение, мы позволяли ему также добавлять больше по мере необходимости. Пользователь может загрузить N изображений. Мы используем метод on()
, чтобы события связывались с каждым вновь созданным элементом.
Обратите внимание, что имена добавленных входных данных - это «файлы», то же имя, которое мы используем в ActionMethod.
<script type="text/javascript">
$(document).ready(function () {
var currentImage = 1;
$("body").on("change", "input[name='files']", function () {
var pathToRemoveIcon = "@Url.Content("~/Public/images/delete.png")";
currentImage = currentImage + 1;
var htmlToAppend = '<div class="upload"><input type="file" name="files" id="file' + currentImage + '" /><img src="' + pathToRemoveIcon + '" alt="Remove picture." /></div>';
$('.upload-container').append(htmlToAppend);
}).on("click", ".upload img", function () {
if ($(this).parent().siblings().length > 0) {
$(this).parent().remove();
}
});
});
</script>
И, наконец, код контроллера, который мы получаем, модель, которую мы хотим связать, а также множество файлов:
[HttpPost]
public ActionResult Create(ProductModel model, IEnumerable<HttpPostedFileBase> files)
{
try
{
if (ModelState.IsValid)
{
foreach (var file in files)
{
// Verify that the user selected a file
if (file != null && file.ContentLength > 0)
{
// extract only the filename
var fileName = Path.GetFileName(file.FileName);
// etc.
}
}
}
return RedirectToAction("Index");
}
catch
{
return View(model);
}
}