Asp.net:委托(“操作”)可以序列化为控制状态吗?

2024-04-22

我正在实现一个用户控件,该控件具有一个将 Action 委托作为参数的方法。

尝试将委托存储在控制状态中会产生序列化错误。是否有可能将委托序列化为控制状态?

BP


这并不容易——而且可能会引发潜在问题。

理论上可以使用反射来确定委托正在调用对象的哪个方法,并为其编写自定义序列化过程。反序列化后,您将再次需要编写逻辑将信息转换为委托引用。

问题是,在一般情况下,在运行时发现需要为其重新生成委托的对象并不总是可能的。如果委托引用 lambda 或匿名方法,事情就会变得更加复杂,因为它们可能涉及闭包。

您可能会更好:

  1. 不保留请求之间的 Action 委托,并让 ASP.NET 代码在回发时重新附加该委托。恕我直言,这是风险最小的选择。

  2. 将委托引用存储在会话状态中,并在回发时将其重新附加到反序列化的对象。此选项存在风险,原因有二:

    a) 如果最终用户从不回发,或者您忘记从服务器状态中清除对象,则无限期地在内存中保留对象引用。

    b) 如果委托引用页面元素(控件等),您可以运行 陷入微妙的错误,因为委托将针对来自previous请求,而不是新请求。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Asp.net:委托(“操作”)可以序列化为控制状态吗? 的相关文章

随机推荐