【问题标题】:Using TempData Several使用 TempData 几个
【发布时间】:2017-12-28 08:27:04
【问题描述】:

我有一个名为 UploadFile 的 mvc 页面,其中包含他们的操作和视图。在我的操作中,我使用 TempData 从一个发送到另一个,以便在刷新视图时重复使用我的 excel 列表。从网格的第一页到第二页时它起作用了。但是在第二次刷新后,临时数据消失了,我又得到了一个空网格。

在传递另一个视图/操作之前,我如何保留和重复使用我的 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();
            }
       }

【问题讨论】:

  • 我很困惑为什么要多次使用临时数据?您可以在 post 函数之外提取对象实例化,但这会通过验证过程,并且多个客户端可能会混淆相同的对象。我认为您需要先告诉我们了解您的最终目标,然后我才能回答这个问题。

标签: c# asp.net-mvc asp.net-mvc-4


【解决方案1】:

使用KEEPPEEK

示例:

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

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

这将帮助您为超过 1 次访问/请求保留数据。

通常,一旦您访问 TempData,它就会被删除

当您总是想为另一个请求保留值时,您可以使用Peek。当保留值取决于附加逻辑时使用Keep

【讨论】:

  • 成功了,伙计。非常感谢您的帮助和快速回复!
  • 我将其标记为 mate,但我无法为您的答案投票,因为我的帐户是新的。感谢您提供信息。
  • 没关系 :) 很高兴它有帮助
【解决方案2】:

TempData 保留HTTP Request 时间的信息。这意味着仅从一页到另一页。这也适用于 302/303 重定向,因为它在同一个 HTTP Request 中。当您从一个控制器移动到另一个控制器或从一个操作移动到另一个操作时,它有助于维护数据。

您可以使用Session 来长期保留该值。

Session["Veri"] = TempDataVeri;

【讨论】:

  • 最好为超过 1 个请求保留临时数据
  • 但他想为多个请求维护数据。
  • 是的,您也可以将 TempData 用于多个请求
  • 是的,但他遇到了TempData 的问题,而Session 可以解决。
  • 好吧,mvc 的想法是删除他们为什么创建 viewbag、viewdata 和 tempdata 的会话
猜你喜欢
  • 2017-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-09
  • 2012-06-02
  • 1970-01-01
相关资源
最近更新 更多