将文件集合返回到新页面

时间:2013-11-08 09:08:53

标签: c# asp.net-mvc

我想构建将显示所有文件的网站,以便打开ASP.NET Web应用程序项目。

在这个文件夹里面我有几个文件夹并点击每个文件夹名称(我有每个文件夹的按钮)将引导我到这个文件夹中所有文件的新页面。 所以我添加了名为folder1的新控制器:

public class WebMailController : Controller
{
    private List<string> list = new List<string>();

    //
    // GET: /folder1/

    public FileInfo Index()
    {
        FileInfo[] array = GetFiles();
        foreach (FileInfo file in array)
            return file;
        return null;
    }

    private FileInfo[] GetFiles()
    {
        DirectoryInfo di = new DirectoryInfo(@"D:\folder");
        FileInfo[] fileInfo = di.GetFiles("*.doc");
        return fileInfo;
    }

}

我的问题:

  1. 目前我只能看到文件夹中的第一个文件
  2. hoe我可以打开新页面但仍然可以看到主页面模板吗?

2 个答案:

答案 0 :(得分:0)

您会看到第一个文件,因为您只是先返回:

FileInfo[] array = GetFiles();
foreach (FileInfo file in array) return file;

因此,您获得第一项并立即将其返回View。相反,你应该返回文件列表。

谈论第二个项目 - 使用PartialView。 在这种情况下,Controller应该返回PartialView而不是项目列表:

public ActionResult Files()
{
    return PartialView("_Files", GetFiles());
}

View应该看起来像:

@Ajax.ActionLink("LoadFiles", "Files", "Home", new AjaxOptions { 
    InsertionMode = InsertionMode.Replace, 
    UpdateTargetId = "files-div"
})

<div id="files-div">
    @Html.Partial("_Files")
</div>

很好example of PartialView

答案 1 :(得分:0)

至于仅查看第一个文件夹 - 您的返回类型为FileInfo,并返回foreach循环的第一次迭代。您想要在IEnumerable<FileInfo>循环中返回yield return file;并使用foreach(并抛出return null) - 但是为什么在您只能返回{{{{{ 1}}?

GetFiles()

我对您的第二个问题的最佳猜测是,您希望将返回public IEnumerable<FileInfo> Index() { FileInfo[] array = GetFiles(); foreach (FileInfo file in array) yield return file; } 结果传递到另一个页面。您可以将结果保存在会话中,或FileInfo并调用TempData将用户重定向到另一个将消耗RedirectToAction结果的操作:

FileInfo