一直对ViewState 了解不是很透彻。这次彻彻底底的去了解了下。结果还是有点小疑问。
首先请求一个页面,页面上面有几个服务器控件。此时服务器会去解析请求的这个页面。并把这些服务器控件 的当前状态获取并序列化最终以 base64的字符 随解析后的页面一起发送到客户端。保持在__VIEWSTATE 这个隐藏域中。 接着 用户对页面上的控件进行赋值等操作。然后再次提交页面。此时页面将回传到服务器。于是页面开始解析这个__VIEWSTATE 隐藏域里面的字符。并将这些这些字符还原成之前的对象。然后通过 控件的 LoadViewState 方法进行重新装载。(此处有点疑问。因为__VIEWSTATE里面存放的是用户修改控件之前的值也就是上一次的值。而不是用户对控件赋值后的最新值。那么如果这里解析__VIEWSTATE的值重新装载给控件的话。是不是会把用户修改的控件值还原成上一次的值。比如一个文本框第一次请求时默认为空,然后用户给他填写了一个1之后提交了这个表单。按上面的思路的话 服务器获取到的__VIEWSTATE里面记录的这个文本框的状态值应该是空值而不是1.不知道大家有没有明白我的意思。 )然后又调用控件的SaveViewState方法获取所有控件的状态然后序列化并转换成base64字符再次发生到客户端。
服务器 Request 会接收 页面提交过来的值,通过id key会替换了原来的值。
服务器应该是会通过request得到input的type=“text,raido ,checkbox”等的新值,然后返回去的时候替换掉旧值的