2009-11-10 47 views
1

我有一個小型的asp.net MVC 1 web應用程序,可以存儲文件並在App_Data目錄中創建目錄。當寫入操作成功時,我向tempdata添加一條消息並執行redirectToRoute。問題是執行操作時tempdata爲空。如果我將這些文件寫入Web應用程序根目錄之外的目錄中,則tempdata不爲null,並且一切正常。任何想法爲什麼寫在app_data似乎清除tempdata?在App_Data中寫入文件會導致tempdata爲空

編輯: 如果DRS.Logic.Repository.Manager.CreateFile(path,hpf,comment)在App_Data中寫入,則TempData在被重定向到的操作中將爲null。如果它是一個不在Web應用程序根目錄中的目錄,那很好。沒有例外被拋出。

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Create(int id, string path, FormCollection form) 
{ 
    ViewData["path"] = path; 
    ViewData["id"] = id; 

    HttpPostedFileBase hpf; 

    string comment = form["FileComment"]; 
    hpf = Request.Files["File"] as HttpPostedFileBase; 

    if (hpf.ContentLength != 0) 
    { 
     DRS.Logic.Repository.Manager.CreateFile(path, hpf, comment); 
     TempData["notification"] = "file was created"; 
     return RedirectToRoute(new { controller = "File", action ="ViewDetails", id = id, path = path + Path.GetFileName(hpf.FileName) }); 
    } 
    else 
    { 
     TempData["notification"] = "No file were selected."; 
     return View(); 
    } 
} 
+0

請發佈代碼,當您寫入不同的目錄時,您還在使用RedirectToRoute嗎? – Lazarus 2009-11-10 13:44:33

+0

是的,我仍然使用redirecttoroute。編寫實際文件的代碼很簡單,並且不會拋出任何異常。我們用相同的結果嘗試了redirectToAction。 – RAMX 2009-11-10 14:24:25

回答

1

找出導致tempdata變爲null的原因。 DRS.Logic.Repository.Manager.CreateFile(path,hpf,comment);在〜/ App_Data /下創建一個臨時目錄,在該目錄中寫入一個文件,將該文件提交到一個存儲庫,然後清理臨時目錄。似乎App_Data中的某些io操作會觸發文件系統監視器並重新啓動Web應用程序。我正在使用inproc會話,因此當應用程序重新啓動時,會話將被清除。 Tempdata實際上存儲在會話中,因此它也被清除。解決方案:不要在web應用程序的根目錄之外使用inproc會話或存儲文件。我不知道App_data下的更改觸發了應用程序重新啓動。

+1

呵呵。你說寫入app_data導致應用程序重新啓動?什麼是特定的IO操作?看看ASP.Net實際報告的內容會很有趣:http://weblogs.asp.net/scottgu/archive/2005/12/14/433194.aspx – a7drew 2010-06-29 23:51:40

+2

看來,導致重啓的IO操作正在刪除一個文件夾。 – jhexp 2010-08-10 12:36:31

+0

經歷了相同的情況。但我的情況是在bin文件夾中,我嘗試創建一個文件夾並在其中寫入文件,但它導致併發字典始終爲空 – 2015-03-19 07:12:39

相關問題