【发布时间】:2019-11-29 10:50:31
【问题描述】:
我需要帮助!
我正在尝试使用 TempData 将列表从一个 ActionResult 传递到另一个。我这样做是因为我正在尝试对三个问题进行实验,其中每个视图的顺序从一开始都是随机的。
public ActionResult Experiment()
{
List<string> stringArray = new List<string>();
stringArray.Add("Experiment" + rn1.ToString());
stringArray.Add("Experiment" + rn2.ToString());
stringArray.Add("Experiment" + rn3.ToString());
var nextExperiment = stringArray.FirstOrDefault();
stringArray.RemoveAt(0);
var experiment = new Experiment();
_context.Add(experiment);
_context.SaveChanges();
TempData["List"] = stringArray;
return RedirectToAction(nextExperiment, new { id = experiment.EID });
}
但是当我试图从 stringList 读取数据时,它是空的。
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Experiment1(ExperimentViewmodel experiment)
{
var newExperiment = new Experiment
{
Question1 = experiment.SelectededItem
};
if (ModelState.IsValid)
{
_context.Update(newExperiment);
await _context.SaveChangesAsync();
var stringList = TempData["List"] as List<string>; //stringList = null
var nextExperiment = stringList.FirstOrDefault(); //The next view in the sequence
stringList.RemoveAt(0); //Removing the view from the list since it's already been used.
TempData["List"] = stringList; //Updating TempData with the new list for the next view.
return RedirectToAction(nextExperiment, new { id = newExperiment.EID });
}
return View();
}
更新:TempData["List"] 确实包含值,但我不知道如何检索数据。当我尝试将其转换为 List(这将是最佳的)时,var stringList 为空。
【问题讨论】:
-
我可能错了,但就重定向而言,您似乎是从 A(实验)到 B(?)再到 C(实验 1 [帖子])。 TempData 将从 A 转到 B,然后为了将其发送到 C,您需要将其处理为一个变量(在视图中),然后将其与您的其他数据一起发布到 C。
-
来自达科:
This may be helpful resource [When to use ViewBag, ViewData, or TempData in ASP.NET](https://rachelappel.com/2014/01/02/when-to-use-viewbag-viewdata-or-tempdata-in-asp-net-mvc-3-applications/) -
@scgough 变量 nextExperiment 是一个随机字符串,可以是 Experiment1、Experiment2 或 Experiment3。在此示例中,我从 ActionResult Experiment1 复制代码只是为了示例。感谢您的回复!
-
@PanagiotisKanavos 我不需要检索视图中的数据(我理解 ViewBag 和 ViewData 是为了。我只想将数据从一个 ActionResult 传递到同一个控制器中的另一个。谢谢回复!
标签: c# .net asp.net-core