【问题标题】:DataTable saved to Session state loses event handlers保存到会话状态的 DataTable 丢失事件处理程序
【发布时间】:2013-01-22 11:08:36
【问题描述】:

我有一个来自强类型 DataSet 的 DataTable,它在 TableNewRow 事件上有一个事件处理程序(用于初始化一些日期字段)

当我将此表保存到会话状态时,事件处理程序会正常触发,直到表被序列化。在我从 Session 状态检索表时的后续请求中,事件处理程序不再触发。

这是正常行为吗,我应该在反序列化时重新连接事件处理程序?如果是这样,由于无法检查是否添加了事件处理程序,那么进行重新布线的正确钩子是什么?

【问题讨论】:

  • 能发一些相关的代码吗?

标签: c# asp.net events


【解决方案1】:

根据你的序列化,你可以尝试通过OnDeserialized属性https://stackoverflow.com/a/4172266/1236044设置事件处理程序

对于Xml序列化,也许你可以试试这样的:

public override void ReadXml (XmlReader reader)
{
    base.ReadXml(reader);
    NewRow+=....
}

【讨论】:

    【解决方案2】:

    您如何存储会话状态?如果它不是 InProc,那么您的所有对象都将被序列化并保存到某个数据库中。然后从反序列化中读取它们。这样您就失去了事件订阅。

    【讨论】:

    • 在使用数据库会话状态时,有没有一种简单的方法可以将带有事件/处理程序的对象转储到会话中?
    猜你喜欢
    • 2011-03-31
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    相关资源
    最近更新 更多