2016-05-19 19 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

良い点tho。 – Qwerty

+0

そして、なぜファイル名に日付が必要なのですか? 'FileInfo.CreationTime'プロパティはファイルがディレクトリにアップロード/作成された日付を含んでいますので、単純なlinqクエリを使ってそれに基づいてフィルタリングする必要があります –

答えて

1

すべてのファイルをビューに送信してからビューに非表示にする必要はありません(何百ものファイルに対してhtmlを生成していますが、showinhのみ表示することがあります)。さらに、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のコレクションに、ファイル名のコレクションを渡すことができます

PDFFileはむしろその IEnumerable<FileInfo>(そのあなたの Splitter()拡張メソッドが実際に何をしているのかクリアしていないが)ある
ResultModel rmodel = new ResultModel() 
{ 
    PDFFile = dir.GetFiles("*.pdf*") 
     .Where(x => x.CreationTime > minDate).Select(x => x.Name); 
}; 
+0

DateTime maxDate = DateTime.AddDays(30); '非静的なフィールド、メソッド、またはプロパティ 'System.DateTime.AddDays(double)'の後ろに_Anオブジェクト参照が必要であるというエラーが返される_ – Qwerty

+0

'DateTime maxDate = DateTime.Today.AddDays(-30);'あなたが今日の日付の30日前にしたいと仮定します。 –

+0

編集を参照してください。しかし、もう一度質問を読んで、私はあなたのロジックが少し不明です。過去30日間に作成されたファイル(編集されたコードが行うもの)のみを表示しますか? –

関連する問題