我建议在MVC3中使用一个简单的会话对象来维护像RecordIds这样的状态数据,而不是将它们传递给所有客户端页面,这将是一件麻烦事。将会话对象填充一次直到不再使用它似乎要简单得多。
这是可接受的做法还是作弊?
非常感谢。
答案 0 :(得分:7)
使用Session对象没有任何问题。通常人们会避免它们减少服务器上的负载;但是如果你小心并且不尝试在那里放置大量数据并且没有太多数据(多少数量取决于你的服务器)那么这是一种可接受的做法。
有关使用会话的潜在缺点的一些信息,请查看the answer至Still ok to use Session variables in ASP.NET mvc, or is there a better alternative for some things (like a cart)
答案 1 :(得分:7)
就像开发人员生活中的一切一样,使用会话是一种权衡,而恕我直言,这通常是一个糟糕的。
会话状态不仅导致服务器上的负载趋于增长并且产生可扩展性障碍(这两个问题都可以 - 部分地通过与状态服务器或sql server存储会话变量来解决),它有一个不是每个人的设计怪癖意识到:它在会话上保持读写锁定。 (http://msdn.microsoft.com/en-us/library/ms178581(v=vs.100).aspx)
这意味着默认情况下,同一用户不能同时发出两个请求。这种行为与asp.net相关(不仅仅是asp.net MVC),但是由于asp.net MVC真的鼓励你走上ajax之路,你会更频繁地看到这个问题)。
你可以巧妙地使用readonly session state or selectively disabling it来绕过这些问题,但是根据我的经验创造了开发开销,因为该属性只能在类范围内声明,而不是特定的操作方法,这会导致你分崩离析通常会在一起的逻辑单位。
总之,您的荣誉,asp.net会话状态默认行为是有问题的。如果可能,请避免使用它。