【问题标题】:Maintaining user controls public property state across postbacks跨回发维护用户控制公共属性状态
【发布时间】:2012-03-28 05:06:59
【问题描述】:

我有一个用户控件,它只在我的应用程序的每个 .aspx 页面上显示客户信息。该用户控件包含从 .aspx 页面(例如 page1.aspx)OnLoad 事件设置的客户信息的公共属性,并在该用户控件中显示信息。现在从此 page1.aspx 重定向到 page2.aspx 但无法在 page2.aspx 用户控件中显示信息(回发后值丢失)。我可以通过在每个控件属性中使用会话来维护用户控件的属性状态,并且可以访问所有页面,但是会话将是一种昂贵的方法。请给我另一个更好的解决方案,以便我可以跨回发维护用户控件属性值。

提前谢谢...

【问题讨论】:

    标签: asp.net properties user-controls session-state


    【解决方案1】:

    信息不会在 PostBack 中丢失,因为 Page2.aspx 在从 Page1.aspx 进行重定向后会获得单独的 GET 请求

    您可以通过以下方式进行状态管理

    1. 会话状态
    2. 应用程序状态
    3. 查看状态
    4. Cookie
    5. 查询字符串
    6. HTML 网络存储

    会话状态似乎是您的场景的逻辑选择,因为应用程序状态会影响所有登录用户的数据。一旦我们执行重定向,视图状态将丢失。对于 cookie,大小限制会有问题,您需要清除存储在 cookie 中的数据。此外,您应该加密存储在那里的数据。查询字符串容易被篡改且不可靠。 HTML Web 存储仅在最新的浏览器中可用,因此浏览器兼容性将是一个问题。

    【讨论】:

      【解决方案2】:

      另一个可能的答案 - 您可以使用 CrossPagePostback。这允许 Page2 自动检测从 Page1 传递的数据。您必须在页面的加载事件中执行此操作。

      重定向将始终将您带到另一个页面,这将始终丢失附加到第一页的任何状态。保持这种状态的唯一方法是不使用 Web 应用程序!

      【讨论】:

        【解决方案3】:

        将用户信息保存在会话中并尽可能少地保存在 cookie 中从来都不是一个好主意。两者都不安全,正如您所看到的,有一些国家包袱很少证明它的使用是合理的。

        我建议回到绘图板并设计一个解决方案,将数据库中的信息明显地保存在服务器上;即使记录在事务结束时被清除。观察该表,您会惊讶地发现有多少会话被丢弃,并且从未达到事务的“正式”结束。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-01-11
          • 1970-01-01
          • 1970-01-01
          • 2011-06-10
          • 2017-05-10
          • 2010-12-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多