4

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

我看到我们什么时候可以使用 TempData ,不想使用 TempData ,因为它会在机器上创建一个状态。

谢谢, 阿尼什

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

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

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

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

4

4 回答 4

3

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

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

于 2012-04-17T21:56:57.563 回答
3

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

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

您要为什么特定场景保留数据?

于 2012-04-17T21:57:14.837 回答
1

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

于 2012-04-18T06:14:03.013 回答
1

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

于 2012-04-18T06:07:40.923 回答