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

时间:2011-02-17 15:34:52

标签: c# asp.net-mvc view .net

我要做的是在我的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);
        }

感谢任何帮助,谢谢:)

3 个答案:

答案 0 :(得分:5)

  1. 恕我直言,你应该只公开视图真正需要的内容。想一想:你真的需要检索整个FileInfo对象,还是仅检索文件路径?如果后者为真,则只需将IEnumerable<string>返回到视图(而不是IEnumerable<FileInfo>,这就是您在上面的代码中所做的事情)。提示:只需向您的Linq表达式添加Select调用...
  2. 然后你的视图将呈现该模型 - 你需要的是一个foreach循环和一些HTML代码来实现它。

答案 1 :(得分:5)

如果您只需要文件名,则可以将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视图

<ul>
  @foreach (var name in Model) {
    <li>@name</li>
  }
</ul>

将显示文件名列表

答案 2 :(得分:3)

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

  @model IEnumerable<FileInfo>

    <h1>Files</h1>
    <table>

    @foreach (var item in Model) {
        <tr>
            <td>
                @item.Name
            </td>
        </tr>
    }

    </table>