首页 > 解决方案 > ASP Net Core - 跨视图临时存储数据

问题描述

我有一个 ASP.Net Core 3.1 Web 应用程序尝试使用TempData. 该应用程序经历了一系列 3 个步骤。但是,在将数据保存到数据库时,只保存最后一个表单的数据,这意味着我的数据没有被保存。

我具有以下功能来存储显然不是的数据:

    private TripLogData GetData()
    {
        if (TempData["TripLogData"] != null)
        {

            TempData["TripLogData"] = new TripLogData();
        }
        return (TripLogData)TempData["TripLogData"];
    }

下面是控制器代码的延续:

        private void RemoveData()
    {
        TempData.Remove("TripLogData");
    }

    [HttpPost]
    public ActionResult Add(Step1 data, string nextBtn, string BtnCancel)
    {
        if (BtnCancel != null)
        {
            TempData.Clear();
            return RedirectToAction("Index");
        }
        if (nextBtn != null)
        {
            if (ModelState.IsValid)
            {
                TripLogData obj = GetData();
                obj.Destination = data.Destination;
                obj.Accomodation = data.Accomodation;
                obj.StartDate = data.StartDate;
                obj.EndDate = data.EndDate;
                ViewBag.Accomodation = data.Accomodation;
                TempData["Destination"] = data.Destination;

                return View("Page2");
            }
        }
        return View();
    }

    [HttpPost]
    public ActionResult Page2(Step2 data, string BtnCancel, string nextBtn)
    {
        TripLogData obj = GetData();
        if (BtnCancel != null)
        {
            TempData.Clear();
            return RedirectToAction("Index");
        }
        if (nextBtn != null)
        {
            if (ModelState.IsValid)
            {
                obj.AccomodationPhone = data.AccomodationPhone;
                obj.AccomodationEmail = data.AccomodationEmail;

                return View("Page3");
            }
        }
        return View();
    }

    [HttpPost]
    public ActionResult Page3(Step3 data, string BtnCancel, string nextBtn)
    {
        TripLogData obj = GetData();
        if (BtnCancel != null)
        {
            TempData.Clear();
            return RedirectToAction("Index");
        }
        if (nextBtn != null)
        {
            if (ModelState.IsValid)
            {
                obj.ThingToDo1 = data.ThingToDo1;
                obj.ThingToDo2 = data.ThingToDo2;
                obj.ThingToDo3 = data.ThingToDo3;
                TempData["TripLogData"] = db.TripLogData.Add(obj);
                db.SaveChanges();
                RemoveData();
                return RedirectToAction("Index");
            }
        }
        return View();
    }
}

TripLogData 模型如下:

    public int? TripId { get; set; }

    public string Destination { get; set; }

    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    [Display(Name = "Start Date")]
    public DateTime StartDate { get; set; }

    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    [Display(Name = "End Date")]
    public DateTime EndDate { get; set; }

    public string Accomodation { get; set; }

    [Display(Name = "Phone Number")]
    public string AccomodationPhone { get; set; }

    [Display(Name = "Email Address")]
    [DataType(DataType.EmailAddress)]
    public string AccomodationEmail { get; set; }

    public string ThingToDo1 { get; set; }
    public string ThingToDo2 { get; set; }
    public string ThingToDo3 { get; set; }

任何有关相同的建议将不胜感激。

标签: asp.net-core

解决方案


推荐阅读