Asp.net mvc 在MVC Razor中持久化数据,而不在请求之间使用TempData

Asp.net mvc 在MVC Razor中持久化数据,而不在请求之间使用TempData,asp.net-mvc,asp.net-mvc-3,razor,persistence,tempdata,Asp.net Mvc,Asp.net Mvc 3,Razor,Persistence,Tempdata,如何在MVC Razor中持久化数据,而不在请求之间使用TempData 我知道什么时候可以使用tempdatafrom,但不想使用TempData,因为它会在机器上创建状态 谢谢你,安妮西 编辑:我想在允许用户对姓名、年龄等字段进行排序的视图页面中保留以前的排序方向 修复:我使用ViewBag修复了它。上一个排序字段/方向使用ViewBag从控制器发送到视图,然后在下一次单击时作为查询字符串传递回 很好的修复:我处理了.js文件中的所有内容,比如检查,然后在控制器中设置previous sor

如何在MVC Razor中持久化数据,而不在请求之间使用TempData

我知道什么时候可以使用tempdatafrom,但不想使用TempData,因为它会在机器上创建状态

谢谢你,安妮西


编辑:我想在允许用户对姓名、年龄等字段进行排序的视图页面中保留以前的排序方向

修复:我使用ViewBag修复了它。上一个排序字段/方向使用ViewBag从控制器发送到视图,然后在下一次单击时作为查询字符串传递回

很好的修复:我处理了.js文件中的所有内容,比如检查,然后在控制器中设置previous sort字段和previous sort dir


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

在客户端页面中维护状态打破了无状态HTTP的概念。你为什么要保持这种状态?如果您正在寻找将一些数据从控制器操作传递到相应视图的解决方案,我建议您使用ViewModel,在其中填充下拉列表中的数据,并将ViewModel对象发送到强类型视图。您将在那里获得您的数据。此外,如果需要一些数据,您还应该在每个请求中从数据层(表/或缓存等)获取数据。 您可以在查询字符串中传递相关id以获取相应的数据


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

我最近没有做过很多ASP.NET MVC 3,但我认为在请求之间持久化数据的唯一真正方法是使用会话状态、cookie,或者通过在每个请求中向服务器发布数据

ViewData、ViewBag和TempData在每个请求结束时都会被有效地删除,而会话状态、Cookie和post数据则在每个请求开始时根据客户端浏览器的信息提供


您试图为哪种特定场景保留数据?

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

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

我希望在允许用户对名称、年龄等字段进行排序的视图页面中保留以前的排序方向。如果您希望永久性地执行此操作(即,即使用户离开页面并返回),我建议使用cookie,否则,您可以将其存储在该州。您必须将排序数据序列化为字符串,并在每次页面加载时对其进行反序列化,以便重新访问数据。否。我不想创建状态,但希望在请求之间持久化数据(而不是从控制器到视图)。比如说,我想知道用户以前单击了哪个字段。这就是我最后所做的。我使用ViewBag将以前的详细信息发送到ViewPage,并根据当前用户操作在a.js中进行验证,并将其以表单数据形式传递回控制器。