c# - 通过浏览器回击(按钮)时,临时数据不会变空(null)

标签 c# asp.net-mvc razor

我在 response 中从 APIcontroller 发送一条成功消息,并在 TempData["Message"] 中设置其值,现在重定向到其他一些操作方法。 像这样:

[HttpPost]
public ActionResult AddFeedbackCategory(IFeedbackCategoryModel modelData)
{
     var message = JsonConvert.DeserializeObject<ApiResponse>(response);
     TempData["Message"] = message.Message;
     return RedirectToAction("CategoryList");
}

[HttpGet]
public ActionResult CategoryList()
{
     var categoryData = JsonConvert.DeserializeObject<List<CategoryModel>>(data);
     return View(categoryData);
}

CategoryListview 中,我编写了如下代码:

  @if (TempData["Message"] != null)
    {
        <div id="snackbar" class="snack_success">@TempData["Message"].ToString() 
        </div>
        TempData["Message"] = null;
    }

每当我像这样在系统中添加一些记录时,它都会显示成功消息(保留 2 秒)。

enter image description here

现在的问题是,当我点击后退按钮,然后再次返回类别列表时,此成功消息再次出现。为什么它的值不会变成空?有什么具体原因或者我做错了什么吗?

最佳答案

假设您从页面 A 导航到页面 B。然后单击页面 B 上的返回(返回到页面 A)。如果您在页面 A 上显式设置缓存 header ,则浏览器可能决定显示页面 A 的旧版本(在转到页面 B 之前呈现的版本)。

要解决此问题,一种选择是禁用浏览器缓存。例如,针对 GET 端点的操作方法使用此方法:

[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*", Location = OutputCacheLocation.None)]

这将确保,如果您按“后退”按钮,浏览器将强制再次访问服务器以重新呈现页面 A(而不仅仅是显示页面 A 的旧版本) .

关于c# - 通过浏览器回击(按钮)时,临时数据不会变空(null),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55632526/

相关文章:

c# - WPF 中的 XML 数据绑定(bind)

asp.net - ASP.NET MVC 5中的ErrorHanldeAttribute或OnException方法未处理异常

c# - 在 C# 中为 List<dynamic> 使用 NULL 局部变量

javascript - 将 Razor 语法变量传递给 Html Helper 的 javascript onclick

c# - C#中的OAuth身份验证

c# - 为什么 C# 不允许静态方法实现接口(interface)?

c# - 按需转换集合包装器

c# - ASP.NET:处理超大报告的策略

asp.net-mvc - 发送批量通知电子邮件而不阻止

razor - Razor Preview 和 Razor Beta 之间表单例份验证的区别?