我有一个通过模态打开的文件列表。我想要的是它应该在文件生成30天后隐藏文件。
这是显示文件的代码
<table>
@foreach (FileInfo res in Model.PDFFile)
{
<tr>
<td>@res.Name.Splitter('_', 1)</td>
<td>
<a data-toggle="modal" href="#testmodal@(res.Name.Splitter('_', 0))">View Result</a>
<div class="modal fade" id="testmodal@(res.Name.Splitter('_', 0))" role="dialog" tabindex="-1">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" data-toggle="tooltip" title="Close"><span class="glyphicon glyphicon-remove"></span></button>
</div>
<div class="modal-body">
<embed src="~/Files/@res.Name" width="850" height="1000" type="application/pdf" />
</div>
</div>
</div>
</div>
</td>
</tr>
}
</table>
这是控制器:
public ActionResult Index()
{
ResultModel rmodel = new ResultModel();
string path = Server.MapPath("~/Files/");
DirectoryInfo dir = new DirectoryInfo(path);
rmodel.PDFFile = dir.GetFiles("*.pdf*");
return View(rmodel);
}
文件名包含文件的日期。你知道怎么在javascript中这样做吗?谢谢!
答案 0 :(得分:1)
没有必要将所有文件发送到视图,然后将它们隐藏在视图中(您可能会为数百个文件生成html,但只显示几个),您应该只在控制器中过滤它们。此外,还不清楚为什么需要在文件名本身中包含日期,因为FileInfo
包含DateTime CreationTime
属性,您可以根据文件上载的日期进行过滤。 / p>
过滤控制器中的文件
public ActionResult Index()
{
DateTime minDate = DateTime.Today.AddDays(-30);
string path = Server.MapPath("~/Files/");
DirectoryInfo dir = new DirectoryInfo(path);
ResultModel rmodel = new ResultModel()
{
PDFFile = dir.GetFiles("*.pdf*").Where(x => x.CreationTime > minDate);
};
return View(rmodel);
}
假设您从文件名中删除了日期,那么您只需将一组文件名传递给视图,而不是FileInfo
的集合,例如
ResultModel rmodel = new ResultModel()
{
PDFFile = dir.GetFiles("*.pdf*")
.Where(x => x.CreationTime > minDate).Select(x => x.Name);
};
其中PDFFile
为IEnumerable<string>
而非IEnumerable<FileInfo>
(虽然不清楚您的Splitter()
扩展方法实际上在做什么)