c# - 另一个 TempData 在控制器操作之间消失的案例
问题描述
所以这是在控制器方法中设置 TempData 的另一种情况,使用 RedirectToAction 然后 TempData 消失了。但奇怪的是我有一个案例,它出于某种奇怪的原因确实有效。这是我的控制器方法:
[HttpGet]
public ActionResult Index()
{
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult UploadXml(IEnumerable<HttpPostedFileBase> files)
{
if (files != null)
{
var fileExtension = Path.GetExtension(files.First().FileName).ToLower();
string errors = string.Empty;
switch (fileExtension)
{
case ".xml":
var doc = XDocument.Load(files.First().InputStream);
TextGetter.ImportXmlDocument(doc, out errors);
break;
case ".xlsx":
TextGetter.ImportExcelDocument(files.First().InputStream, out errors);
break;
default:
break;
}
if (!string.IsNullOrWhiteSpace(errors))
{
TempData["FileValidationErrors"] = errors;
}
}
return RedirectToAction("Index");
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult AddMissingLanguages(FormCollection formCollection)
{
try
{
TempData["NrOfLanguageNodesAdded"] = TextGetter.AddMissingLanguagesToNodes();
}
catch (Exception ex)
{
Logger.Error(MethodBase.GetCurrentMethod().Name, ex);
Response.StatusCode = (int)System.Net.HttpStatusCode.BadRequest;
return Json(TextGetter.GetText(Constant.ERROR, Constant.TEXT_GLOBAL) + ": " + ex.Message, System.Net.Mime.MediaTypeNames.Text.Plain, JsonRequestBehavior.AllowGet);
}
TempData.Keep("NrOfLanguageNodesAdded");
return RedirectToAction("Index");
}
在我看来,这是我使用它们的方式:
@if (TempData.ContainsKey("FileValidationErrors") && !string.IsNullOrWhiteSpace(TempData["FileValidationErrors"].ToString()))
{
<div class="row">
<div class="col-12">
<div class="alert alert-danger alert-dismissible fade show" role="alert">
@TextGetter.GetText("XmlValidationFailedMessage", "setup/translation")Failed to validate the uploaded xml file with the following errors:<br />
@TempData["FileValidationErrors"].ToString()
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
</div>
</div>
}
@if (TempData.ContainsKey("NrOfLanguageNodesAdded"))
{
<div class="row">
<div class="col-12">
<div class="alert alert-success alert-dismissible fade show" role="alert">
Number of missing nodes added:<br />
@TempData["NrOfLanguageNodesAdded"].ToString()
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
</div>
</div>
}
所以这是奇怪的部分,当我调用方法“UploadXml”时,当我重定向到索引并且其中的消息显示在视图中时,TempData 确实存在。但是当我调用“AddMissingLanguages”时它不起作用,并且我尝试了很多事情,比如在各个阶段使用“.keep”和“.peek”等等,但无论我做什么,它都不适用于第二个控制器动作方法。
任何人都知道为什么会这样?
解决方案
推荐阅读
- sql - 使用 dbt 从雪花 information_schema 中检索表名
- azure-devops - Azure Devops Yaml 管道变量(例如 Process.Clean)作用于一个阶段
- c - C中的线程安全队列出现分段错误
- angular - Angular Typescript - 从对象列表中过滤对象
- excel - 如何使用单元格的内容来指定要引用的工作表名称?
- javascript - Redux 增强器示例
- mysql - 创建数据库时在 MySQL 表中格式化 DATE?
- python - 当第一个排序键相同时如何使用两个不同的排序键对列表进行排序
- sql - 如果不存在,如何在 SQL 表中插入值
- python - 大型 .tif 图像数据集 - 如何使用带有单独 CSV 中标签的 Tensorflow 将其转换为 CNN 的可用数据集?蟒蛇 3