asp.net-core - 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; }
任何有关相同的建议将不胜感激。
解决方案
推荐阅读
- javascript - 如何在 Angular 8 应用程序中使用 jQuery?
- latex - Latex 中的二叉树
- angular - 垫图标角复杂图像
- elasticsearch - ElasticSearch 7.2.0 的默认用户名和密码是什么(启用 x-pack 时)?
- python - 如何创建一个替换单词的函数
- javascript - Internet Explorer 是否有某些您不能使用的 JS?
- android - 在 QRcodeScanner React native 中打开/关闭手电筒 - 替代解决方案
- java - 为什么片段中的 setVisibility 不起作用?
- http-status-codes - 如何使用 Micronaut 客户端接受自定义 HTTP 错误代码?
- javascript - 重新加载脚本文件是一个好习惯吗?