2017-12-28 66 views
0

私は自分のアクションとビューでUploadFileという名前のmvcページを持っています。私の行動では、TempDataを使用して、ビューが更新されたときにExcelリストを再利用するために、別のものに送信しました。これはグリッドの最初のページから2ページ目に行くときに機能しました。しかし、2回目のリフレッシュ後に、tempdataが消えて、再び空のグリッドができました。TempDataを複数使用する

別のビュー/アクションを渡すまで、自分のTempDataを保持して再利用するにはどうすればよいですか。

 [HttpGet] 
     public ActionResult UploadFile() 
     { 
      return View("UploadFile", TempData["Veri"]); 
     } 

     [HttpPost] 
     public ActionResult UploadFile(HttpPostedFileBase file) 
     { 
      try 
      { 

       string _FileName = string.Empty; 
       string _path = string.Empty; 
       List<ImportExcelDto> listExcel = new List<ImportExcelDto>(); 


       if (file.ContentLength > 0) 
       { 
        _FileName = Path.GetFileName(file.FileName); 
        _path = Path.Combine(Server.MapPath("~/App_Data/uploads"), _FileName); 

        string tempfolder = Server.MapPath("~/App_Data/uploads"); 


        var fileGeneration = new DirectoryInfo(Server.MapPath("~/App_Data/uploads")); 
        fileGeneration.GetFiles("*", SearchOption.AllDirectories).ToList().ForEach(f => f.Delete()); //Directory'deki eski excel dosyalarını temizler 

        file.SaveAs(_path); 
       } 
       ViewBag.Message = "Dosya Başarıyla Aktarıldı!"; 

       DataTable dt = Helpers.GetDataTableFromExcel(_path, true); 

       for (int i = 0; i < dt.Rows.Count; i++) 
       { 
        ImportExcelDto item = new ImportExcelDto() { KartNo = dt.Rows[i][0].ToString(), Tutar = dt.Rows[i][1].ToDecimal() }; 
        listExcel.Add(item); 
       } 

       var TempDataVeri = listExcel; 
       TempData["Veri"] = TempDataVeri; 
       return View("UploadFile", listExcel); 
      } 
      catch (Exception ex) 
      { 
       ViewBag.Message = "Dosya Aktarılamadı!"; 
       return View(); 
      } 
     } 
+0

なぜ一時データを何回使用したいのですか?ポスト関数の外でオブジェクトのインスタンス化を引き出すこともできますが、検証プロセスをパスすると複数のクライアントが同じオブジェクトを混在させる可能性があります。私はあなたが私の質問に答える前に、あなたの最終目標を理解するように言わなければならないと思います。 – dev8989

答えて

1

使用KEEPPEEK

例:

object value = TempData.Peek("value"); 

object value = TempData["value"]; 
//later on decide to keep it 
TempData.Keep("value"); 

これは、1つの以上のアクセス/要求のためのデータを保持するのに役立ちます。あなたがTempDataにアクセスしたら

は通常、それはあなたが常に別の要求のための値を保持したいときは、Peekを使用することができます

を削除されます。値を保持する場合は、追加のロジックに応じてKeepを使用します。

+0

それは働きました。あなたの有益かつ迅速な返信に多くの感謝を! – Emre

+0

私はそれを相手にマークしましたが、私のアカウントは新鮮なのであなたの答えをアップアップすることはできません。ピック・キープ情報をありがとう。 – Emre

+0

それは大丈夫です:)それは助けてうれしい –

0

TempDataHTTP Requestの時間のための情報を保持します。これは、あるページから別のページへのみ意味します。同じHTTP Requestにあるため、これは302/303リダイレクションでも機能します。あるコントローラーから他のコントローラーに移動するとき、またはあるアクションから別のアクションに移動するときにデータを維持するのに役立ちます。

Sessionを使用すると、長時間値を保持できます。

Session["Veri"] = TempDataVeri; 
+0

1つ以上のリクエストのtempdataを保つ方が良い –

+0

しかし、彼は複数のリクエストに対してデータを維持したいと考えています。 – Nitesh

+0

はい複数のリクエストにもTempDataを使用できます –

関連する問題