我在 response
中从 API
向 controller
发送一条成功消息,并在 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);
}
在 CategoryList
的 view
中,我编写了如下代码:
@if (TempData["Message"] != null)
{
<div id="snackbar" class="snack_success">@TempData["Message"].ToString()
</div>
TempData["Message"] = null;
}
每当我像这样在系统中添加一些记录时,它都会显示成功消息(保留 2 秒)。
现在的问题是,当我点击后退按钮,然后再次返回类别列表时,此成功消息再次出现。为什么它的值不会变成空?有什么具体原因或者我做错了什么吗?
最佳答案
假设您从页面 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/