我遇到了一个问题,我已经搜索了文档,看是否我犯了一个错误或某些错误,但是没有找到我想要的答案。我的问题是,保存产品后,我使用PRG(Post-Redirect-Get)模式,以便用户在按浏览器后退按钮时不会重新提交表单。我使用TempData显示一条消息,因为它在删除之前将数据持久保存到下一个请求。这种方法在我的开发环境上可以正常工作。但是,在将应用程序部署到生产服务器之后,尽管操作方法遵循PRG模式并成功返回,但TempData不会持久化,也不会显示消息。
这是我显示消息的方式:
@if (TempData["Message"] != null)
{
var message = JsonConvert.DeserializeObject<MessageModel>(TempData["Message"].ToString());
<div class="alert bg-@message.Class text-center alert-dismissible fade show fixed-bottom w-100" role="alert" style="margin:0">
<h6 class="text-white">@message.Message</h6>
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
}
这是方法示例:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(Product model)
{
if (!ModelState.IsValid)
{
return View(model);
}
var product = await _productRepository.GetProductAsync(model.ID);
product.Name = model.Name; product.ProductCode = model.ProductCode; product.Category = model.Category;
product.Description = model.Description;
await _productRepository.UpdateAsync(product);
TempData["Message"] = JsonConvert.SerializeObject(new MessageModel { Class = "success", Message = "Product has been successfully updated" });
return RedirectToAction("Edit", new { id = model.ID });
}
任何帮助将不胜感激。谢谢!
答案 0 :(得分:3)
好吧,由于Asp.net Core中的常规数据保护法规支持,如果用户(在本例中为我)不同意数据收集,并且应用程序的CheckConsentNeeded设置为true,则所有非必要的cookie(TempData ,会话Cookie)不会发送到浏览器。在启用TempData和Session cookie之前,需要先对其进行跟踪。因此,解决方案是实施cookieConsentPartial文件并通过单击“确定”进行同意,或者将checkConsentNeeded设置为其默认值false。您可以在这里EU General Data Protection Regulation (GDPR) support in ASP.NET Core
了解更多信息