我想构建将显示所有文件的网站,以便打开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;
}
}
我的问题:
答案 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>
答案 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