【问题标题】:TempData key not found issue in asp.net core在 asp.net 核心中找不到 TempData 键问题
【发布时间】:2017-07-24 14:15:54
【问题描述】:

我正在使用 TempData 在视图页面中传递成功或失败消息。 当我第一次部署应用程序时它工作正常,但是当服务器重新启动/重新启动时,我在 TempData 中遇到会话问题,如下面的屏幕截图所示。

谢谢

【问题讨论】:

标签: c# asp.net-mvc session asp.net-core-mvc


【解决方案1】:

TempData 在下一个请求完成后被丢弃。这对于一次性消息很有用,例如表单验证错误。这里需要注意的重要一点是,这适用于会话中的下一个请求,因此该请求可能发生在不同的浏览器窗口或选项卡中。

TempData 通常用于在控制器之间传递值。

您应该使用ViewBagViewData 将值从控制器传递到视图。

喜欢

ViewBag.YourKey = "Value" 

在 CSHTML 上

@if(ViewBag.YourKey!=null)
{
}

或使用 ViewData

ViewData["YourKey"] = "Value" 

在 CSHTML 上

@if(ViewData["YourKey"] !=null)
{
}

谢谢

【讨论】:

  • 其实,没有。 TempData 通常用于传递一次性消息信息,例如“操作成功”或类似信息。它可以跨控制器,也可以只是从控制器到视图。无论如何,告诉他们使用不同的机制并不能解决问题。
  • 仍然没有解决问题。使用不存在的键调用 TempData 不应引发此异常,它应返回 null。
  • 默认的 TempData 索引器使用 TryGetValue 并在未找到时返回 null。请参阅github.com/aspnet/Mvc/blob/dev/src/…,因此无论是否“适当”使用,都不应发生这种情况。
  • @ErikFunkenbusch 您好,临时数据不是用于将值从一个操作传递到另一个后续操作,如果我错了,请原谅我,但可以在视图中使用临时数据???
  • @RAHULSR - 是的,TempData 当然可以在视图中使用。它也可以按照您的建议使用。默认情况下,TempData 存储在会话中,但在最新的 ASPNET-MVC 核心 2.0 版本中,它将其存储在 cookie 中。无论如何,TempData 可以在 asp.net-mvc 应用程序的任何地方使用。 ViewData/Bag 不能跨控制器实例使用,因为它使用基于 Request 的 HttpContext.Items。
猜你喜欢
  • 2017-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-09
  • 1970-01-01
  • 2011-05-31
  • 2017-12-14
  • 1970-01-01
相关资源
最近更新 更多