我觉得我可能在这里忽略了页面生命周期的一个基本概念,并且一直(因为我无法找出正确的关键字或没有被问到)无法找到现有的答案,请原谅我有人问过这个。
基本上,我需要在客户端和服务器端之间保留一个可变对象。由于视图状态是加密/序列化的,并且会话状态只是服务器端的,我的解决方案是使用隐藏字段——很简单,对吧?好吧,这是我的问题......它似乎正在工作,但数据没有像我预期的那样传播。
我的期望是这样的:
- 第一次加载页面。服务器端类识别隐藏字段为空,初始化容器类,将类序列化为 JSON 字符串并将该值写入隐藏字段。
- Page_Init:不可用。
- Page_Load:不可用。
- Page_LoadComplete:可用。
- 服务器处理完成,对象现在可供客户端代码使用。
- 隐藏字段中的对象被客户端代码改变。客户端代码然后触发回发到服务器(通过按钮)。
- 服务器端处理开始...
- Page_Init:不可用。
- Page_Load:可用,包括客户端更改。
- Page_LoadComplete:可用,包括客户端更改。
- 世界上一切都好,双彩虹在我的窗外闪耀,一只神奇的独角兽向我眨眼和点头。
我的观察是这样的:
- 第一次加载页面。服务器端类识别隐藏字段为空,初始化容器类,将类序列化为 JSON 字符串并将该值写入隐藏字段。
- Page_Init:不可用。(正如预期的那样)
- Page_Load:不可用。(正如预期的那样)
- Page_LoadComplete:可用。(正如预期的那样)
- 服务器处理完成,对象现在可供客户端代码使用。
- 隐藏字段中的对象被客户端代码改变。客户端代码然后触发回发到服务器(通过按钮)。
- 服务器端处理开始...
- Page_Init:不可用。(正如预期的那样)
- Page_Load:可用,但不会随着客户端所做的更改而更新。(意外)。
- Page_LoadComplete:可用,包括客户端更改。(正如预期的那样)
- 一团乌云笼罩着我的小隔间,我开始思考我的笔记本电脑能否在二楼从阳台上掉下来的情况下幸存下来。
结论
由于几个原因,这让我有点困惑......首先是我以前从未使用过“LoadComplete”事件,并且似乎找不到任何示例表明它是必要的,甚至应该是那样做的。第二个是在引发加载完成时,其他依赖于客户端数据的事件已经被触发。
任何帮助/解释/建议;地狱,即使是批评也值得赞赏!
谢谢,杰森