【问题标题】:ASP.net user control nightmareASP.net 用户控制噩梦
【发布时间】:2010-03-02 01:26:08
【问题描述】:

我已经实现了一个用户控件,可以在多个页面上重复使用。但是,我遇到了各种各样的问题,例如跨页面的会话维护、导航时的会话清除——本质上是控制状态维护,我想知道这一切都值得头疼。

每次加载页面时,都会向其中添加一个控件,如果适用,我会使用会话重新创建其状态。当我离开一个页面时,我使用 web 方法通过 javascript window.onunload 清除会话。 Window.onunload 在新的 page_load 事件之后执行给我带来了麻烦,因此造成了一种非常难以处理的情况。

关于如何在不放弃用户控件的情况下解决此问题的任何提示? 重用代码而不扯掉头发的另一种方法是什么? 谢谢!

【问题讨论】:

  • 您能否发布一些关于您如何清除会话以及何时清除的代码?
  • 我使用 web 方法清除 window.onunload 内的会话。

标签: asp.net session user-controls window.onunload


【解决方案1】:

这是一个常见的头痛。根据我所看到的所有文献以及我自己的个人经验,通过 javascript 或任何其他方式依赖清算会话是不切实际的。 Session 状态的概念覆盖在 HTTP 之上;它从来都不是会话感知的。

听起来您将会话状态强调到了临界点。您是否考虑过使用 ViewState 或数据库来管理有状态数据?为什么每次用户离开时清除会话数据很重要?

【讨论】:

  • 如果用户点击顶层菜单,他们应该得到默认的控件状态,而不是之前记住的状态....因此在某些地方,我想清除会话。
  • ViewState 是更好的解决方案。
  • ViewState 是一个字典,可以保存可序列化的对象,并在隐藏表单字段中的 Base64 编码字符串中跨回发保持。它对于跨回发的状态管理很有用,但会增加通过网络传输的数据量。用法:ViewState["MyData"] = myObj;
  • ^ 我实际上不能有太多的数据通过网络传输,但在这种特殊情况下,Session 对象的情况也是如此——它也存储在服务器上。
【解决方案2】:

我解决了在托管用户控件的页面上使用 IsPostBack 的问题。这样每次页面不是回发的结果时,都会初始化用户控件的状态变量。

【讨论】:

    猜你喜欢
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 2020-03-14
    • 2010-11-13
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多