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

C# MVC在视图中显示文件夹中的文件,c#,asp.net-mvc,view,.net,C#,Asp.net Mvc,View,.net,我想做的是在MVC应用程序的视图中显示服务器上的文件夹的内容 我有我认为应该采取的行动,但是我有点不确定如何实施相应的观点,我想知道是否有人可以指出正确的方向。(此外,如果有人认为我的行为可以改进,欢迎提供建议:) 行动如下: public ActionResult Index() { DirectoryInfo salesFTPDirectory = null; FileInfo[] files = null;

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

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

行动如下:

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);
        }
任何帮助都将不胜感激,谢谢:)

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

  • 这是razor视图的简化示例。它会将您的文件名输出到HTML表中

      @model IEnumerable<FileInfo>
    
        <h1>Files</h1>
        <table>
    
        @foreach (var item in Model) {
            <tr>
                <td>
                    @item.Name
                </td>
            </tr>
        }
    
        </table>
    
    @model IEnumerable
    文件夹
    @foreach(模型中的var项目){
    @项目名称
    }
    
    如果只需要文件名,则可以将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>
    
      @foreach(模型中的变量名称){
    • @名字
    • }

    哪个将显示文件名列表

    是否仅将其显示为列表?如果是这样,标准的索引视图就不远了。在MVC 3中创建视图时,您可以选择一个模板作为基础。感谢您的回复。你说得对,我需要做的就是列出文件夹中的文件。