我要做的是在我的MVC应用程序的View中显示位于我服务器上的文件夹的内容。
我认为应该采取行动,但我不确定如何实施相应的观点,我想知道是否有人可以指出正确的方向。 (而且,如果有人认为我的行动可以改进,建议会受到欢迎:))
以下是行动:
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);
}
感谢任何帮助,谢谢:)
答案 0 :(得分:5)
FileInfo
对象,还是仅检索文件路径?如果后者为真,则只需将IEnumerable<string>
返回到视图(而不是IEnumerable<FileInfo>
,这就是您在上面的代码中所做的事情)。提示:只需向您的Linq表达式添加Select
调用... 答案 1 :(得分:5)
如果您只需要文件名,则可以将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 :(得分:3)
这是剃刀视图的简化示例。它将在HTML表格中输出您的文件名。
@model IEnumerable<FileInfo>
<h1>Files</h1>
<table>
@foreach (var item in Model) {
<tr>
<td>
@item.Name
</td>
</tr>
}
</table>