1

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

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

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

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

4

1 回答 1

4

不,那不是真的。

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

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

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

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

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

On the next Postback (say "Fourth Value"), you'll be able to see "First Value", "Third Value" and "Fourth Value" at different times during the page lifecycle, but "Second Value" will be gone for good.

于 2012-06-14T09:12:08.860 回答