C# 在MVC中从目录中删除文件
一年前我用MVC写了一些代码,我对框架的了解似乎已经消失了。在下面的代码块中,我列出了目录中的所有文件,并提供了下载它们的链接(针对经过身份验证的用户)。我想做的是提供删除每个文件的选项。我刚刚添加了一个删除按钮,但我不确定从那里去哪里C# 在MVC中从目录中删除文件,c#,asp.net-mvc,C#,Asp.net Mvc,一年前我用MVC写了一些代码,我对框架的了解似乎已经消失了。在下面的代码块中,我列出了目录中的所有文件,并提供了下载它们的链接(针对经过身份验证的用户)。我想做的是提供删除每个文件的选项。我刚刚添加了一个删除按钮,但我不确定从那里去哪里 @{IEnumerable<string> enumerateFiles = Directory.EnumerateFiles(Server.MapPath("~/Content/Documents"));} @{ if (Request.I
@{IEnumerable<string> enumerateFiles = Directory.EnumerateFiles(Server.MapPath("~/Content/Documents"));}
@{
if (Request.IsAuthenticated)
{
<h3>Authenticated User: @User.Identity.Name</h3>
<h4>-Downloadable Files-</h4>
<ul>
@foreach (var fullPath in enumerateFiles)
{
var fileName = Path.GetFileName(fullPath);
<li> <a href="../../Content/Documents/@fileName"> @fileName</a>
<button type="button" id="fileRemover" value="Delete" onclick="return confirm('Are you sure?')" >Delete</button>
</li>
}
</ul>
}
else
{
<h3>Non-Authenticate User, register and/or login to see documents</h3>
}
}
@{IEnumerable enumerateFiles=目录.enumerateFiles(Server.MapPath(“~/Content/Documents”);}
@{
如果(请求已验证)
{
已验证用户:@User.Identity.Name
-可下载文件-
@foreach(枚举文件中的var fullPath)
{
var fileName=Path.GetFileName(完整路径);
-
删除
}
}
其他的
{
非身份验证用户、注册和/或登录以查看文档
}
}
查看文件和删除文件的代码应包含在控制器中。视图仅用于向用户显示信息(通常来自模型)
如果我是你,我会这样构造控制器:
public class FilesController : Controller
{
public ActionResult List()
{
List<FileInfo> model = new List<FileInfo>();
// Grab all file names from the directory and place them within the model.
return View(model);
}
public ActionResult View(string fileName)
{
// Add header for content type
// Grab (and verify) file based on input parameter fileName
return File(...);
}
public ActionResult Delete(string fileName)
{
// Verify file exists
// Delete file if it exists
return RedirectToAction("List");
}
}
公共类文件控制器:控制器
{
公共行动结果列表()
{
列表模型=新列表();
//从目录中获取所有文件名并将其放置在模型中。
返回视图(模型);
}
公共操作结果视图(字符串文件名)
{
//为内容类型添加标题
//根据输入参数文件名获取(并验证)文件
返回文件(…);
}
公共操作结果删除(字符串文件名)
{
//验证文件是否存在
//删除文件(如果存在)
返回重定向到操作(“列表”);
}
}
文件名应作为HTTP POST变量提供
因此,必须创建一个隐藏字段来保存文件名,以便在提交表单时可以访问操作上的值
在操作名称上方,您将使用[HttpPost]属性,以便表单提交在此操作上登录
使用HTTP POST而不是HTTP GET是安全的,否则任何具有url的人都可以删除文件
如果有多个文件名,则每个隐藏字段的名称可以为filename_1、filename_2等
我已经给了你看和调查的方向。你应该把你所有的C#从你的视野中移开。这将重新调整您对服务器端和客户端之间差异的记忆。这是我尝试做的第一件事。我不知道如何将文件名传递给删除操作。我在视图@using(Html.BeginForm(“Delete”,“Home”,FormMethod.Post)){}中使用了两种方法:a)将文件名的删除链接作为查询字符串的一部分(假设您的删除操作可以使用GET HTTP动词). 类似于:b)单击delete按钮时会触发一些javascript。javascript将填充一个隐藏的表单字段(id=“fileName”)。填充隐藏字段后,提交表单。