2016-05-19 37 views
0

我有一個通過模態打開的文件列表。我想要的是它應該在文件生成後30天隱藏文件。根據日期差異隱藏項目

下面是顯示文件

<table> 
       @foreach (FileInfo res in Model.PDFFile) 
       { 
        <tr> 
         <td>@res.Name.Splitter('_', 1)</td> 
         <td> 
          <a data-toggle="modal" href="#[email protected](res.Name.Splitter('_', 0))">View Result</a> 
          <div class="modal fade" id="[email protected](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

在將集合發送到視圖之前,爲什麼不在控制器中過濾它們? –

+0

好點壽。 – Qwerty

+0

爲什麼你需要包含在文件名中的日期? FileInfo.CreationTime屬性將包含文件在目錄中上傳/創建的日期,因此您應該僅使用簡單的linq查詢進行篩選 –

回答

1

沒有意義將所有文件發送到視圖,然後將它們隱藏在視圖中(您可能會爲幾百個文件生成html,但只顯示幾個文件),您應該將它們過濾到控制器中。此外,它還不清楚爲什麼您需要在文件名稱本身中包含日期,因爲FileInfo包含DateTime CreationTime屬性,您可以使用該屬性根據文件上傳日期進行過濾。

要過濾的文件在控制器

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); 
}; 

其中PDFFileIEnumerable<string>寧可IEnumerable<FileInfo>(雖然它不清楚是什麼你Splitter()擴展方法實際上是在做)

+0

'DateTime maxDate = DateTime.AddDays(30);'返回一個錯誤,說_An對象引用是必需的非靜態字段,方法或屬性'System.DateTime.AddDays(double)'_ – Qwerty

+0

糟糕,應該是'DateTime maxDate = DateTime.Today.AddDays(-30);'假設你想在今天的日期前30天。 –

+0

請參閱編輯。但是再次閱讀這個問題,我現在對你的邏輯有點不確定。您是否希望僅查看在過去30天內創建的文件(編輯後的代碼將執行此操作) –