2010-02-20 45 views
1

我在保存当前视图的状态时遇到了一些麻烦。在ASP.NET MVC 2应用程序中将哪些数据保存到会话中?

当然,我有几个selectlist在控制器上调用他们自己的Action方法,该方法返回Index视图,基于选择列表的值过滤模型。

我也写了一个小小的FileResult操作,它根据当前模型创建一个csv文件。但我只覆盖一个选择列表的,现在我只能保存selectList1的价值到会议,并与Session["SelectListValue1"]

  • 访问它是什么在这种情况下,最好的做法是什么?
  • 我应该重做整个(每个SelectList的每个动作)部分吗?
  • 我应该将每个SelectLists值保存到会话中并检查它是否为空?
  • 或者我应该将Lambda Expression保存到会话中并在每次通话期间对其进行修改?

回答

1

那么,通常在MVC中,我们不直接保存到Session,它不被认为是对应用性能产生影响的最佳实践。通常,尽可能使每个请求都为无状态是最佳做法。

每个表单应尽可能遵循POST-Request-GET模式,因此您不打算按照您在WebForms中做的规则(您不断发回相同的表单/操作)。

所以你应该考虑你试图捕捉的状态是什么。可能值的列表是一件事,可能来自数据库,并可能在缓存中存储为列表或可枚举(在某些情况下;可能在其他情况下每次查看它)。但是,选中的值可能代表osme其他对象上的属性,所以应该使用它作为获取选定值的方法。

如果它不是持久对象的一部分,那么您可以每次只读取帖子值并再次设置视图状态(可能是最佳做法),或者如果您需要在重定向中保留该值,然后使用TempData包(其工作方式与会话非常相似;实际上会使用会话),但在下一次请求之后值会被垃圾回收,因此您不必担心内存膨胀。

0

这听起来并不像你需要使用会话。你不能通过查询字符串或表单传递你的选择列表的值吗?

相关问题