TempData的另一种情况在控制器动作之间消失

问题描述

这是在控制器方法中使用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">&times;</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">&times;</span>
                </button>
            </div>
        </div>
    </div>
}

所以这是一个奇怪的部分,当我调用方法“ UploadXml”时,当我重定向到索引并且其中的消息显示在视图中时,TempData确实存在。但是,当我调用“ AddMissingLanguages”时,它不起作用,并且我已经尝试了许多不同的事情,例如在各个阶段使用“ .keep”和“ .peek”,但无论如何,但是无论如何我都不会对第二个控制器动作起作用方法

有人知道为什么会这样吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)