【问题标题】:MVC Display Files from a Folder in a ViewMVC 在视图中显示文件夹中的文件
【发布时间】:2011-06-29 04:44:46
【问题描述】:

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

我有我认为应该为 Action 准备的内容,但是我有点不确定如何实施相应的视图,我想知道是否有人可以指出正确的方向。 (而且,如果有人认为我的 Action 可以改进,欢迎提出建议 :))

下面是动作:

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);
        }

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

【问题讨论】:

  • 您只想将它​​们显示为列表吗?如果是这样,标准的索引视图就不会太远了。在 MVC 3 中创建视图时,您可以选择一个模板作为其基础。

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


【解决方案1】:

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

    【讨论】:

    • 感谢您的回复。没错,我需要做的基本上就是列出文件夹中的文件。
    【解决方案3】:

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

      @model IEnumerable<FileInfo>
    
        <h1>Files</h1>
        <table>
    
        @foreach (var item in Model) {
            <tr>
                <td>
                    @item.Name
                </td>
            </tr>
        }
    
        </table>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多