1

我有一个小的 asp.net MVC 1 Web 应用程序,它可以存储文件并在 App_Data 目录中创建目录。当写操作成功时,我向临时数据添加一条消息并执行redirectToRoute。问题是执行操作时临时数据为空。如果我将文件写入 Web 应用程序根目录之外的目录中,则临时数据不为空,并且一切正常。为什么在 app_data 中写入似乎可以清除 tempdata 的任何想法?

编辑:如果 DRS.Logic.Repository.Manager.CreateFile(path, hpf, comment) 在 App_Data 中写入,则在重定向到的操作中 TempData 将为空。如果它是 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();
    }
}
4

1 回答 1

1

找出导致 tempdata 变为空的原因。DRS.Logic.Repository.Manager.CreateFile(路径,hpf,评论);在 ~/App_Data/ 下创建一个临时目录,在该目录中写入一个文件,将该文件提交到存储库,然后清理该临时目录。似乎 App_Data 中的某些 io 操作触发了文件系统监视器并重新启动了 Web 应用程序。我正在使用 inproc 会话,因此当应用程序重新启动时,会话将被清除。临时数据实际上存储在会话中,因此它也被清除了。解决方案:不要使用 inproc 会话或将文件存储在 Web 应用程序的根目录之外。我不知道 App_data 下的更改触发了应用程序重启。

于 2009-11-11T01:46:15.130 回答