在asp.net MVC中的操作之间共享变量

本文关键字:操作 之间 共享变量 asp net MVC | 更新日期: 2023-09-27 18:21:35

我有以下场景,可能需要将数据存储在conroller成员变量中,以便在操作之间共享数据。

我有一个搜索表单和一个按钮——点击后,会根据搜索表单参数返回一个充满数据的表。一个动作-一切都很好,很干净。

我现在被要求放置一个excel按钮,以便用户可以下载excel格式的表格。我不想再次运行数据库查询,因为数据已经存在,但由于我使用的是服务器端的Excel组件,我需要数据在服务器上可用,以便将其推送到Excel中。

我最初的想法是在我的控制器中有一个额外的变量来存储数据。但我从未见过在asp.net MVC中这样做。这是公认的模式吗?我的理解是,每一个行动都有点孤立。

在asp.net MVC中的操作之间共享变量

MVC模式鼓励无状态。这意味着,如果你想在操作之间保留数据,它需要从客户端发布(服务器不应该维护与特定会话相关的任何状态)。(因此,是的,每个操作都应该是孤立的,不应该依赖于以前的任何操作,即不应该依赖以前请求的设置)

请阅读顾的博客,了解MVC在这里的含义http://weblogs.asp.net/scottgu/archive/2007/10/14/asp-net-mvc-framework.aspx

如果您在访问数据时遇到性能问题,我建议您使用数据提取的服务器端缓存。理想情况下,这应该在应用程序的数据访问或查询层中实现,并且不应该与特定的会话强绑定

每次请求后,控制器都会被丢弃。你每次都会得到一个新的。如果要存储数据,最简单的方法是将其置于会话状态。

我建议使用TempData,例如这里描述的http://rachelappel.com/when-to-use-viewbag-viewdata-or-tempdata-in-asp.net-mvc-3-applications

更新:返回此处完成的文件返回文件以在ASP.NET MVC 中查看/下载

有一个单独的控制器来返回文件是正常的做法。