Я пытаюсь создать простую CMS, которая позволяет автору загружать файлы (в частности, изображения, но тип файла на данный момент не очень важен).Передача имени файла на вид
Загрузка файла работает нормально. Однако я хочу предоставить возможность перечислить и впоследствии удалить файл (возможно, позже несколько файлов, но на данный момент один файл одновременно).
Я осмотрел сеть. Я вижу множество примеров, использующих EF для хранения местоположения файла в БД, потому что у них есть разрешения и роли и т. Д. В то время как это то, что мне может понадобиться в будущем, это не уровень сложности, который я готов добавить правильно Теперь.
Все, что я хочу, это просто нажать ссылку удаления (как будто вы удаляете запись в БД). Чтобы вызвать действие, которое вызывает просмотр подтверждения удаления. Затем на этом представлении нажмите кнопку удаления, чтобы фактически удалить файл и вернуть пользователя в список. Ниже мой код до сих пор:
Это было бы представление, в котором перечислены файлы:
@model IEnumerable<FileInfo>
@{
ViewBag.Title = "File List";
}
<h2>Index</h2>
<p>
@Html.ActionLink("Upload", "Upload")
</p>
<table class="table">
<tr>
<th>File Name</th>
<th>Actions</th>
</tr>
@foreach (FileInfo file in Model)
{
<tr>
<td>@file.Name</td>
<td>@Html.ActionLink("Delete", "Delete", new { fileName = @file.Name })</td>
</tr>
}
</table>
я не буду показывать контроллер для этой точки зрения, как это относительно просто и не там, где я имею проблему (я думать). Я только показал это, чтобы вы могли видеть ссылку на удаление и сказать мне, что что-то не так.
Ниже удаления вид подтверждения:
@model FileInfo
@{
ViewBag.Title = "Delete";
}
<h2>Delete</h2>
<h3>Are you sure you want to delete this?</h3>
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.FullName)
</dt>
<dd>
@Html.DisplayFor(model => model.FullName)
</dd>
</dl>
@using (Html.BeginForm("Delete", "FileManagement", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.AntiForgeryToken()
<div class="form-actions no-color">
@Html.ActionLink("Back to list of views", "Index", null, new { @class = "btn btn-success" })
|
@*@Html.ActionLink("Delete", "Delete", null, new { @class = "btn btn-danger" })*@
<input type="submit" value="Delete file" formaction="Delete" formmethod="delete" class="btn btn-danger" />
</div>
}
Ниже приведены два Удалять действия (GET и POST/DELETE)
// GET: FileManagement/Delete/filename
public ActionResult Delete()
{
return View();
}
// POST: FileManagement/Delete/filename
[HttpDelete]
[ValidateAntiForgeryToken]
public ActionResult Delete(string fileName)
{
var path = Path.Combine(Server.MapPath("~/UserFiles"), fileName);
if (System.IO.File.Exists(path))
System.IO.File.Delete(path);
else
return HttpNotFound();
return RedirectToAction("Index");
}
Я не вид модели, как я не подключен к базе данных (пока). Файлы просто загружаются в папку ~/UserFiles/someFileName.ext, и полный путь получается путем добавления этого к server.mappath обычным способом.
Проблема, с которой я столкнулась, заключается в том, чтобы получить имя файла в окне подтверждения удаления, а также кнопку удаления, которая передала бы ее удалению для выполнения задания.
Спасибо за любую помощь.
Ваша форма не размещать какие-либо значения - вы не имеете вход или значение маршрута для 'filename' поэтому значение из Параметр 'string fileName' всегда будет' null' (обратите внимание, что вам не нужно 'new {enctype =" multipart/form-data "}' - это необходимо только для загрузки файла на сервер) –
Ваш метод GET не есть параметр для получения 'fileName' из' ActionLink() 'либо. И тогда он не передает модель в представление, поэтому его «null» (и вам действительно нужно отобразить подтверждение в основном представлении). –
. Форма подтверждения удаления не показывает имя файла по какой-либо причине. Я учил, что получаю это из первоначального представления (списка), когда я нажал кнопку удаления там, но по какой-то причине он не перешел к форме подтверждения удаления. Будет ли перемещение формы в окне удаления выше имени поля и значения? Возможно, я должен поместить скрытый элемент управления в форму списка с именем файла и прочитать это каким-то образом в контроллере удаления? Или использовать viewbag/data? –