【发布时间】:2009-03-09 07:31:13
【问题描述】:
如何将 GridView 的选定行的值存储到会话变量中?
【问题讨论】:
如何将 GridView 的选定行的值存储到会话变量中?
【问题讨论】:
从代码隐藏文件中,您将希望使用类似的东西来访问选定行中的基础数据项 (MyDataItem)。
MyDataItem item = (MyDataItem)GridView1.Rows[GridView1.SelectedIndex].DataItem;
Session["myItem"] = item;
但请记住,gridview 已经为您存储了这些数据,因此您可能只想在需要时直接从 GridView 访问它。
【讨论】:
附带说明:我能否强烈建议您不使用会话状态。
除非您将其用作为当前用户缓存数据的存储,否则您可以在任何时间从例如一个数据库。
如果没有,“会话”会回来并咬你。在某些时候,会有一个用户让浏览器保持打开的时间比您的会话寿命更长(例如,他们接到一个电话,匆忙出去吃午饭,匆忙参加会议......)。当他们回来时,他们希望完成他们正在做的事情。而且,如果您当时无法恢复所有会话数据,您将不得不重新引导您的用户重新开始(这对您的用户来说非常烦人),或者您将丢失一些信息(非常尴尬),或者最糟糕的情况情况,也是最常见的情况:您的应用程序将不再工作并崩溃(很简单:非常糟糕)。
定义存储状态(查询参数、选定项等)的小型可序列化对象并使用 ASP.NET Viewstate 跨页面请求存储该状态是一种更好的方法。请注意,大多数 ASP.NET 控件已经使用视图状态来存储它们的数据。然后禁用页面中网格的视图状态,以大大减少视图状态中的数据量,并在每次请求时请求数据(在这里使用会话或 ASP.NET 缓存来提高应用程序的性能是安全的) .您将拥有一个更健壮且更具可扩展性的应用程序。
这是更多的工作,但它会很快得到回报,而且会翻很多倍。
【讨论】:
ViewState 仅作用于一页内。它对回发问题很有用,但对跨页问题没有用。 Session 可以同时处理这两种情况,但它在安全性、寿命、传输时间方面存在一些限制……根据具体情况,您可以选择正确的选择。
【讨论】: