3

我有一个问题,我搜索了文档以查看可能是我犯了错误或其他什么,但没有找到我正在寻找的答案。我的问题是,保存产品后,我使用 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">&times;</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 });
    }

任何帮助,将不胜感激。谢谢!

4

1 回答 1

6

好吧,由于 Asp.net Core 中的通用数据保护条例支持,如果用户(在这种情况下是我)尚未同意数据收集并且应用程序已将 CheckConsentNeeded 设置为 true,则所有非必要的 cookie(临时数据、会话 cookie ) 不会发送到浏览器。TempData 和 Session cookie 需要在它们起作用之前启用跟踪。因此解决方案是实现 cookieConsentPartial 文件并通过单击确定同意或将 checkConsentNeeded 设置为其默认值,即 false。您可以在此处阅读更多ASP.NET Core 中的欧盟通用数据保护条例 (GDPR) 支持

于 2018-10-01T21:45:16.697 回答