【问题标题】:How long does an object in the CodeBehind live?CodeBehind 中的对象可以存活多久?
【发布时间】:2011-04-28 02:11:30
【问题描述】:

如果我在 .aspx 页面的代码隐藏中创建一个对象,我可以期望该对象存在多长时间?它会跨越回传吗?我可以以某种方式将它传递到另一个页面吗?我可以让它与会话对象一样长吗?

我在网上搜索了一份文档,解释了从代码隐藏创建的对象的生命周期,以及如何与这个生命周期进行交互;任何相关链接将不胜感激。

顺便说一句,我在代码隐藏中使用 C#,但我想大多数针对 VB 的建议也适用。

【问题讨论】:

    标签: c# asp.net object lifecycle lifetime


    【解决方案1】:

    如果我在 .aspx 页面的代码隐藏,多长时间 我能指望那个物体活着吗?将要 它存在于回传中?我可否 以某种方式将其传递到另一个页面?可以 我让它活得长久,比如说, 会话对象?

    您可以在会话中保存对象实例:

    Session["Foo"] = new MyFoo();
    

    您可以在有权访问会话的任何页面上检索实例:

    MyFoo foo = (MyFoo) Session["Foo"];
    

    对此的替代方法是使用static 变量 - 在这种情况下,该变量将保持其值,直到应用程序域被破坏(即重新启动 IIS 时) - 但它也是全局的,因为它具有相同的所有用户的价值(因为它根本与会话无关)。

    【讨论】:

    • AppDomains 可以被回收的原因有很多,不仅仅是 IIS 重启。此外,您也可以将对象保存到 ViewState 中,然后它会在会话休息时继续存在(但不能跨页面)。
    【解决方案2】:

    该对象只会与页面一样长,即在页面请求期间。如果您想让它的寿命更长,您可以存储在 Session 中并为每个请求检索它。

    【讨论】:

      【解决方案3】:

      代码隐藏在请求期间存在。它不会跨越回传。如果您希望在回发中添加值,则可以向 Session 添加值。这同样适用于 VB。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-20
        • 2020-06-11
        • 2018-03-04
        • 2017-09-20
        相关资源
        最近更新 更多