你要问的问题是什么呢?
其他按钮又是指的什么按钮提交表单呢?
对补充问题的回答:
既然楼主清除微软ASP.Net页面的机制,知道在页面中所有控件的属性、状态、内容等都被保存在页面的隐藏域中,当提交表单时这些内容必须被更新后才能成功提交,否则在页面中输入的内容或改变是不会被提交的。因此就会使得某些提交是先保存属性、状态、内容再提交,而有些提交是没有保存属性、状态、内容就提交(这就导致提交的是改变之前的属性、状态和内容)!
关于详细内容最好能看看有关Aspx页面的生命周期等相关文章。
再次对补充问题的回答:
关于页面生命周期简述如下文:
一般加载分为以下几个主要阶段(粗体标出的阶段的特殊性后面解释):
Init - 初始化,是否为动态控件就以此为分界,Init之前加入到控件树的控件其处理过程就和ASPX中静态声明的一致,因为静态控件也就是在Init前加入的。
LoadViewState - 加载ViewState。
ProcessPostData - 处理PostData,倒不如说是加载PostData,因为此阶段控件多数仅加载PostData,顺便判断PostData是否有改变,别的处理不在此阶段作。
Load - 加载,让ASP.NET程序员尽情发挥创意的地方,包括如何糟蹋ASP.NET这个框架。
ProcessPostData Second Try - 第二次尝试处理PostData,和第一次所做的一样,不过第一次执行时已在控件树上的控件不会受到第二次打扰。
Raise ChangedEvents - 冒泡Changed类事件,这里指的是由于PostData变更而引起的Changed类事件。
Raise PostBackEvent - 冒泡PostBack类事件,除了Changed类以外的所有事件都在这里引发。
PreRender - 预呈现,这名字不怎么好记,改为“末日审判”或许会好一些,因为作为上帝的程序员在这里判决每一个变量的最终值。
SaveViewState - 保存ViewState,判决执行的阶段,变量最终值在此保存,判入地狱的变量无权进入ViewState这个天堂并从此消失。
Render - 呈现,可能是生命周期中最无法解耦的一个阶段。
Unload - 卸载,有加载自然有卸载,但其实没有多少人知道它的存在。
这11个主要阶段可以简单分为3大步骤:
加载数据:LoadViewState, ProcessPostData, ProcessPostData Second Try
处理数据:Raise ChangedEvents, Raise PostBackEvent
保存数据:SaveViewState
这3大步骤构成了ASP.NET页面处理体系,其中第2步的处理数据是基于事件冒泡的形式,也正是ASP.NET比ASP先进的地方。ASP.NET把是否处理以及如何处理分离开来了:控件内部的逻辑决定是否处理,如果要处理就触发事件;控件外部的逻辑决定如何处理,仅当事件触发时才会被执行。
【本叙述为部分转载,原文网址:http://www.cnblogs.com/micolour/articles/626341.html】
从中不难看出,保存页面状态在生命周期的哪个环节,在页面生命周期说明中正好解答怎样才能保存页面状态及其原理!