保存到会话状态的DataTable将丢失事件处理程序

本文关键字:事件处理 程序 DataTable 会话状态 保存 | 更新日期: 2023-09-27 18:28:57

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

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

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

保存到会话状态的DataTable将丢失事件处理程序

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

对于Xml序列化,也许您可以尝试以下操作:

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

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