【问题标题】:Does Viewstate maintain historyViewstate 是否维护历史记录
【发布时间】:2026-01-17 18:45:01
【问题描述】:

根据候选人的回答,我对 ViewState 在 ASP.Net 应用程序中的功能感到困惑。根据候选人的说法,如果您有一个具有某些值的控件并且您更改了该值,则在回发时它将初始值以及更改后的值发送到服务器。因此,如果您继续更改值并提交,则将整个树发送到服务器。我尝试在线搜索,但无法获得任何相关事实。

如果上述描述令人困惑,这里有一个示例可以更清楚地说明声明:
- 我们有<asp:TextBox ID="txt1" runat="Server" Text="First Value"/>
- 页面加载后,我在txt1 中输入“第二值”并点击提交并再次加载相同的页面(因为我没有在点击事件中编写任何逻辑)
- 现在我在txt1中输入“第三值”并再次点击提交。

根据我第一次点击提交时的候选人,“第一个值”和“第二个值”都被发送到服务器,当页面加载之后,它会加密这两个值并将其放入 ViewState 所以当我第二次点击提交,视图状态中的加密值(同时具有“第一值”和“第二值”)与“第三值”一起提交。

我不是工程背景,候选人曾经并声称这是大学教给他的内容。我只是想知道这些说法是否有道理。任何帮助表示赞赏。

【问题讨论】:

    标签: asp.net viewstate


    【解决方案1】:

    不,那不是真的。

    在第二次提交时,“Second Value”将作为 ViewState 隐藏字段的一部分发送,“Third Value”作为 TextBox 的值发送。

    但是,在页面生命周期的不同时间,所有三个值都将在服务器上可见(这可能是造成混乱的原因)。

    • 在页面生命周期的初始化阶段,将设置“第一个值”(来自页面标记)。

    • 在 LoadViewState 阶段,这将替换为“第二值”(来自 ViewState)

    • 在 LoadPostbackData 阶段,这将被“第三值”替换。

    在下一次回发(比如“第四值”)中,您将能够在页面生命周期的不同时间看到“第一值”、“第三值”和“第四值”,但“第二值”会永远离开。

    【讨论】: