有一个动态添加控件的页面。正在从数据库中检索控制状态,并在回发时将控件重新添加到页面。用户可以通过UI添加/删除控件。当两个用户在同一页面上并且一个用户添加/删除控件时,另一个用户在下次尝试修改控件状态时将收到ViewState错误。
“无法加载视图状态。加载视图状态的控制树必须与上一次请求期间用于保存视图状态的控制树匹配。例如,在动态添加控件时,控件在post-back必须与初始请求期间添加的控件的类型和位置相匹配。“
这是因为当绘制页面时我使用了一组控件,并且在回发时获得了一组不同的控件,因为控件状态被不同的用户修改。
我理解错误及其发生的原因,但我想我在这里遗漏了一些东西。有没有办法让页面动态添加控件,并且可以处理修改控件状态的并发用户?
答案 0 :(得分:1)
您需要将当前用户的状态与 master 或全局状态分开。在回发时,不是根据数据库中的主定义构建控制树,而是加载特定于当前用户的高速缓存控制树。一旦您通过ViewState重建,然后启动您的协调过程 - 无论是自动还是需要加载另一个UI以允许用户参与都超出了问题的范围。
关键是你需要在每个用户的基础上保留主人的“分支”,并以更加可控的方式提交和阅读。