在ASP.NET WebForm里要想网站某个文件夹的文件列出来供用户下载似乎很简单,WebForm帮你做了很多事,只需要在Html文件里写:
<a href="~/download/">下载列表</a>
即可在点击链接后打开下载目录(download是个文件夹,里面放着一些文件。)。
而在MVC里这样写是不行的,因为MVC不是用文件夹目录的方式来访问,而是采用路由的方式。所以,就算超链接指向了正确的路径也会提示找不到文件。
在MVC里应该怎样做呢?
一、可以不用改动Controller,只在View里写一个循环访问文件夹的方法即可(UploadModel是站点根目录下的Content文件夹下的一个文件夹)。
<h4>下载模板</h4> <table class="table"> <tr> <th>文件名</th> <th>下载</th> </tr> @{ foreach (string fullFilePath in Directory.GetFiles(Server.MapPath("~/Content/UploadModel"))) { <tr> <td><a href="@Href("~/Content/UploadModel", Path.GetFileName(fullFilePath))">@Path.GetFileName(fullFilePath)</a></td> <td><a href="@Href("~/Content/UploadModel", Path.GetFileName(fullFilePath))">下载</a></td> </tr> } } </table>
二、或者在Controller和View里都改动下:
Controller
public ActionResult Upload() { var files = Directory.EnumerateFiles(Server.MapPath("~/Content/UploadModel")); return View(files); }
View
@foreach (var fullPath in Model) { var fileName = Path.GetFileName(fullPath);
<tr> <td><a href="@Href("~/Content/UploadModel", fileName)">@fileName</a></td>
</tr>
}
这样都可以得到一个下载文件的列表。
只是下载单个的文件:
<a href="@Href("~/Content/myfile.zip")">下载</a>
--End--