MVC在视图中显示文件夹中的文件

我想要做的是在我的MVC应用程序的View中显示位于我的服务器上的文件夹的内容。

我有我认为应该采取的行动,但是我有点不确定如何实施相应的观点,我想知道是否有人可以指出正确的方向。 (而且,如果有人认为我的行动可以改进,欢迎提出建议:))

这是行动:

public ActionResult Index() { DirectoryInfo salesFTPDirectory = null; FileInfo[] files = null; try { string salesFTPPath = "E:/ftproot/sales"; salesFTPDirectory = new DirectoryInfo(salesFTPPath); files = salesFTPDirectory.GetFiles(); } catch (DirectoryNotFoundException exp) { throw new FTPSalesFileProcessingException("Could not open the ftp directory", exp); } catch (IOException exp) { throw new FTPSalesFileProcessingException("Failed to access directory", exp); } files = files.OrderBy(f => f.Name).ToArray(); var salesFiles = files.Where(f => f.Extension == ".xls" || f.Extension == ".xml"); return View(salesFiles); } 

任何帮助将不胜感激,谢谢:)

如果您只需要文件名,则可以将Linq查询更改为

 files = files.Where(f => f.Extension == ".xls" || f.Extension == ".xml") .OrderBy(f => f.Name) .Select(f => f.Name) .ToArray(); return View(files); 

然后(假设默认项目模板)将以下内容添加到Index.cshtml视图中

 
    @foreach (var name in Model) {
  • @name
  • }

这将显示文件名列表

  1. 恕我直言,你应该只暴露视图真正需要的东西。 想一想:你真的需要检索整个FileInfo对象,还是仅检索文件路径? 如果后者为真,则只返回一个IEnumerable到视图(而不是IEnumerable ,这是你在上面的代码中所做的)。 提示:只需在Linq表达式中添加一个Select调用…
  2. 然后你的视图将呈现该模型 – 你需要的是一个foreach循环和一些HTML代码来完成它。

这是剃刀视图的简化示例。 它将在HTML表格中输出您的文件名。

  @model IEnumerable 

Files

@foreach (var item in Model) { }
@item.Name