代码之家  ›  专栏  ›  技术社区  ›  Faizan S.

保存到ASP.NET MVC 2应用程序会话中的位置和数据?

  •  1
  • Faizan S.  · 技术社区  · 15 年前

    我在保存当前视图的状态时遇到一些问题。

    现在我有几个选择列表调用它们自己的 Action 方法返回 Index 使用基于SelectList值的筛选模型查看。

    我还编写了一个小的fileresult操作,它基于当前模型创建一个csv文件。但我现在只介绍一个selectlist,因为我只将selectlist 1的值保存到会话中,并使用 Session["SelectListValue1"]

    • 在这种情况下,最佳实践是什么?
    • 我应该重做整个(每个selectlist的每个操作)部分吗?
    • 我应该将每个selectlist值保存到会话中并检查它是否为空吗?
    • 或者我应该保存 Lambda Expression 进入会话并在每次调用时修改它?
    2 回复  |  直到 15 年前
        1
  •  1
  •   Paul    15 年前

    嗯,在MVC中,我们一般不会直接保存到会话中,这不被认为是影响应用程序性能的最佳实践b/c。通常,最好的做法是使每个请求尽可能无状态。

    在可能的情况下,每个表单都应该遵循POST REQUEST GET模式,这样就不会像在WebForms中那样做(在这种情况下,您将继续向同一表单/操作发帖)。

    所以你应该考虑一下你试图捕捉的状态代表什么。可能值的列表是一回事,可能从数据库中提取并存储为列表,也可能在缓存中可枚举(在某些情况下,可以在其他情况下每次查找)。但是,所选的值可能表示OSME其他对象上的一个属性,因此您应该使用它作为获取所选值的方法。

    如果它不是持久对象的一部分,那么您可以每次读取post值并再次设置viewstate(可能是最佳实践),或者,如果需要在重定向过程中保持该值,则使用tempdata包(它的工作方式与session非常相似;实际上在hood下使用session),但值会得到垃圾c在下一个请求之后集合,所以您不必太担心内存膨胀。

        2
  •  0
  •   James L    15 年前

    听起来你根本不需要使用会话。不能通过查询字符串或窗体传递所选列表的值吗?