【发布时间】:2019-04-20 09:18:17
【问题描述】:
使用我的控制器,我可以将文件上传到特定路径。我想弄清楚如何在我的视图中删除迭代文件。
控制器方法:
[Authorize(Roles = "Moderatorzy")]
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult DeleteFile(string file)
{
if (!System.IO.File.Exists(file))
{
return NotFound();
}
System.IO.File.Delete(file);
return View("Edit");
}
查看文件:
<form asp-action="Edit" method="post" enctype="multipart/form-data">
<input type="hidden" asp-for="ID" />
(...)
@if (Enumerable.Count(ViewBag.fileList) != 0)
{
<dir>Files to download:</dir>
{
foreach (var file in ViewBag.fileList)
{
<a class="down" href="Autobus/DeleteFile?file=@(ViewBag.fileDirectory + file)"><dir>@file<span>;</span></dir></a>
}
}
}
(...)
<div class="text-center">
<button class="btn btn-success" type="submit">Zapisz</button>
<a href="javascript:history.go(-1)" class="btn btn-primary">Powrót</a>
</div>
<div class="space"></div>
现在我有两个问题:
1) Autobus 是控制器名称。 href="Autobus/DeleteFile?file=@(ViewBag.fileDirectory + file)" 给了我路径:/Autobus/Autobus/DeleteFile(...) 而不是 /Autobus/DeleteFile(...)。为什么?
2) 手动键入一个Autobus 后,它不会调用DeleteFile 方法。为什么?
完整生成的路由路径为:http://localhost:50686/Autobus/Autobus/DeleteFile?file=C:\Users\asus\Desktop\Praca%20IT\Programowanie\Projekty\DluzynaSzkola\ASP.NET%20Core%20-%20ostatni\Dluzyna_Szkola_2\BasicConfig\wwwroot/uploaded/bus/1.jpg
附:我猜可能是路由有问题。
【问题讨论】:
-
您缺少领先的
/-href="/Autobus/DeleteFile?...(删除操作应该是 POST 而不是 GET) -
@StephenMuecke 好点,谢谢,但我仍然收到
Status Code: 404; Not Found并且在public ActionResult DeleteFile(string file)方法中没有遇到断点。 (更新问题) -
你有一个 AntiForgeryTokenAttribute。这可以防止通过 get 调用该方法。将删除按钮放在自己的表单中,并添加一个 AntiForgeryToken。
-
@Silvermind 我将
@if(...)移出之前的表单,并放在迭代@Html.AntiForgeryToken() <form method="post" class="adminBtn"> <a class="down" href="/Autobus/DeleteFile?file=@(ViewBag.fileDirectory + file)"><dir>@file<span>;</span></dir></a> </form>中,我遇到了同样的错误。 -
现在将其设为“按钮”而不是“a”,并将 url 放入表单操作属性中。
标签: c# razor routing asp.net-core-mvc wwwroot