asp.net mvc 发布数据和页面刷新(会话变量 vs tempData vs 检测 F5)

Pau*_*aul 3 asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我正在自学 MVC,并且正在努力为我的问题找出最佳解决方案。我有一个带有大量输入字段的搜索控制器。我还将有多个搜索字段的重载,例如基本搜索高级搜索 searchByCategory 等。

当搜索表单发布时,我重定向到另一个显示搜索结果的操作。如果我按 f5,则再次触发 get 操作,而不是在我的帖子重定向到的操作中刷新搜索结果。理想情况下,我想在Action Method不使用查询字符串的情况下重定向到搜索结果,或者检测何时刷新并重新查询数据库,并在同一个搜索控制器中使用不同的操作。我已经阅读了很多关于此的帖子,我能找到的唯一 2 个解决方案是使用会话变量或 TempData。任何人都可以建议什么是最佳实践

Ima*_*ani 5

从注释中 大部分时间我更愿意使用时间TempData代替QueryString。这样可以保持 Url 干净。

任何人都可以建议什么是最佳实践

回答

一旦数据被发送到Action Method从数据库中获取结果之后,据我所知,您可以TempData用来存储发布的数据。它就像一个DataReader类,一旦读取,数据就会丢失。这样存储的数据TempData将变为空。

var Value = TempData["keyName"] //Once read, data will be lost
Run Code Online (Sandbox Code Playgroud)

因此,即使在读取数据后也要保留数据,您可以像下面这样活着

var Value = TempData["keyName"];
TempData.Keep();                   //Data will not be lost for all Keys
TempData.Keep("keyName");          //Data will not be lost for this Key
Run Code Online (Sandbox Code Playgroud)

TempData也适用于新的选项卡/Windows,就像Session变量一样。

您也可以使用SessionVariable,唯一的主要问题是SessionVariable 与TempData. 最后,您还可以跨控制器/区域保存数据。

希望这篇文章对你有很大帮助。