问题描述
这是在控制器方法中使用RedirectToAction设置TempData的另一种情况,然后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”,但无论如何,但是无论如何我都不会对第二个控制器动作起作用方法。
有人知道为什么会这样吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)