在MVC Razor中保留数据,而不在请求之间使用TempData

时间:2012-04-17 21:51:45

标签: asp.net-mvc asp.net-mvc-3 razor persistence tempdata

如何在不在请求之间使用TempData的情况下在MVC Razor中保留数据?

我知道什么时候我们可以使用来自this的TempData,但不希望TempData在机器上创建状态。

谢谢,Anish

编辑:我想在View页面中保留以前的排序方向,允许用户对Name,Age等字段进行排序。

FIX:我使用ViewBag修复它。先前的排序字段/方向使用ViewBag从Controller发送到View,然后在下次单击时将其作为查询字符串传回。

Good FIX:我处理了.js文件中的所有内容,例如检查,然后在Controller中设置上一个排序字段和上一个排序目录。

这就是我最终做的。我使用ViewBag将以前的详细信息发送到ViewPage,并根据当前用户操作在.js中进行验证,并将其传递回表单数据中的控制器。

4 个答案:

答案 0 :(得分:3)

维护客户端页面中的状态是打破无状态HTTP概念的东西。你为什么要保持国家?如果您正在寻找将控制器操作中的一些数据传递到相应视图的解决方案,我建议您使用ViewModel填充下拉列表的数据,并将该ViewModel对象发送到强类型视图。您将在那里获得您的数据。如果你想要一些数据,你也应该在每个请求中从DataLayer(来自表格/或Cache等)中获取数据。 您可以在查询字符串中传递相关的ID以获取相应的数据。

正如RTigger所提到的,您可以在会话中存储一些数据。这将在所有页面上提供,直到该会话的生命周期。

答案 1 :(得分:3)

我最近没有做过很多ASP.NET MVC 3,但我认为你可以在请求之间保存数据的唯一方法是使用会话状态,cookie,或者通过每次请求将数据发布到服务器。

ViewData,ViewBag和TempData在每个请求结束时都被有效杀死,而会话状态,cookie和发布数据在每个请求开始时根据来自客户端浏览器的信息提供。

您尝试保留数据的具体方案是什么?

答案 2 :(得分:1)

您可以在重定向时将这些值作为查询字符串参数传递。

答案 3 :(得分:1)

如果发布表单,可以将参数设置为隐藏的输入字段。但是如果您要通过HTTPGET调用操作,则可以使用QueryString参数传递值。