0

我想构建的网站将显示根目录中的所有文件,因此打开了 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. 锄头我可以打开新页面但仍然看到主页模板吗?
4

2 回答 2

0

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

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

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

第二项——使用PartialView。在这种情况下,控制器应该返回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>

很好的例子PartialView

于 2013-11-08T09:15:43.483 回答
0

至于只看到第一个文件夹 - 您的返回类型是FileInfo并且您返回foreach循环的第一次迭代。你想在你的循环中返回一个IEnumerable<FileInfo>并使用(并扔掉)——但是当你可以只返回结果时,为什么还要麻烦呢?yield return file;foreachreturn nullGetFiles()

public IEnumerable<FileInfo> Index()
{
    FileInfo[] array = GetFiles();
    foreach (FileInfo file in array)
        yield return file;
}

我对您第二个问题的最佳猜测是您希望将返回FileInfo结果传递到另一个页面。您可以将结果保存在会话中,或者TempData调用RedirectToAction以将用户重定向到另一个将使用FileInfo结果的操作:

public ActionResult Index()
{
    TempData[ "files" ] = GetFiles();

    RedirectToAction( "Files" );
}

public ActionResult Files()
{
    var fileInfos = TempData[ "files" ];

    // do stuff with fileInfos
}
于 2013-11-08T09:20:40.387 回答