本来早就知道使用了static的误区,无想这次给自己下了一个圈套。
在代码页全局变量定义了一个对象
protected static MyClass my_obj = null;
本来就是想要这个对象在该页面全局存在,并且会记录页面postback的值。static是可以实现的。
问题在于static的变量是存在于服务器,并且static的值共享给每个访问该页面的用户,这样用户A和用户B同时访问该页面,以static定义的变量属于共享性质,A编辑的时候值是10,而B编辑的时候值改成了20,这时,A保存的时候,变量的值就成了20而非10了。
所以出现了多用户保存,而保存的值错乱不知何故。如是也。
客户反映,我第一反应就是这个static的问题了。果真如此。
于是就是使用ViewState了。
protected MyClass my_obj{
get{return (MyClass)ViewState["my_obj"];}
set{ViewState["my_obj"] = value;}
}
于是我这个代码页都不需要修改把定义的方式改成get和set的方式。
但是MyClass在定义的时候需要作可序列化的标示。
[Serializable]
public class XW_work_item : TableBase{
//
}
否则会出现viewstate 未标记为可序列化 出错提示。