Используя ASP. NET MVC, на мой взгляд, я перечисляю некоторые файлы и показываю их как кнопку. При нажатии на каждую кнопку необходимо загрузить соответствующий файл.
Чтобы показать список файлов, я передаю модель для просмотра, и когда пользователь нажимает на каждую из этих кнопок, я должен отправить имя файла и исходную модель обратно в контроллер.
Я нашел ответы на похожий вопрос, но в моем случае у меня нет только одной кнопки. У меня есть одна кнопка для каждого имени файла, которое я отображаю при просмотре.
Это код моего представления:
@using (Html.BeginForm("DownloadFile", "SharedFolder", FormMethod.Post))
{
<div class="col-sm-6">
<div class="panel panel-info">
<div class="panel-heading">Files</div>
<div class="panel-body" style="max-height:300px; height:300px; overflow-y:scroll">
@foreach (var file in Model.Files)
{
<button type="button" class="btn btn-link btn-sm" onclick="location.href='@Url.Action("DownloadFile", "SharedFolder", new { fileToDownload = file, data = Model })'">
<div class="glyphicon glyphicon-file" style="color:dodgerblue">
<span style="color:black;">@file</span>
</div>
</button>
<br />
}
</div>
</div>
</div>
}
И действие моего контроллера:
[HttpPost]
public ActionResult DownloadFile(string fileToDownload, FolderExplorerViewModel data)
{
// download the file and return Index view
return RedirectToAction("Index");
}
Когда я нажимаю на файл, чтобы загрузить его, я получаю сообщение об ошибке ниже:
Ресурс не может быть найден.
Запрошенный URL: / SharedFolder / DownloadFile
Обновление:
Это моя ViewModel
public class FolderExplorerViewModel
{
public int ID { get; set; }
public List<Folder> Folders { get; set; }
public List<string> Files { get; set; }
public string SelectedPath { get; set; }
}