# ASP. NET 4. 0: View StateMode... 允许您对 View State 有更多的控制权!

<datetime class="hidden">2010-02-18T00:00</datetime>

<!-- category -- mostlylucidcouk, Imported -->
观察国家是一个痛苦...在那里,我说过! 观察国家最痛苦的就是人们经常滥用它, 将它保留在一页的每一个控制上, 而事实上你只需要它来控制它, 而这种控制真的需要坚持到下一页。 [戴夫·里德](http://weblogs.asp.net/infinitiesloop/) ASP.NET团队的一位开发者 写了一篇真正史诗般的文章 [`真正理解观察国 '](http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx)在你读下一篇文章之前, 你真的应该去读一下,首先

回来?

好了,现在你明白,你应该只使用 ViewState 来控制那些真正需要它的控制。但有一个问题...你真正想做的是 整个页面关闭 ViewState 然后重新打开它 **需要它的控制器,** 我也有好消息...当ASP.NET4.0出现时! 允许你这样做的ASP.NET控制系统 的神奇小财产叫做View StateMode。 (顺便提一句,这就是这个。 [戴夫的](http://weblogs.asp.net/infinitiesloop/) 下面的样本与他毫不羞耻地撕裂:-)

简言之,“View StateMode”有三个可能的值, **已启用**, **残疾残疾人残疾人** 和 **继承遗产**这在他们的职能上是显而易见的...**已启用** 为此项控制( 或任何设定为“ 继承” 或未设定任何子控” 的子控) , 转而打开保存视图状态( View State) , @ info: whatsthis **残疾残疾人残疾人** 又关了它, **继承遗产** 说「不管我父母想做什么,

以下是一个非常简单的例子,

&lt;窗体 id= “ forst1” runat= “ server” 窗体&gt;

&lt;脚本 runat = “ 服务器”&gt;

在 Load( 晚上) { { { 无效

如果(! 是后背) {

标签1. Text = 标签2. Text = "[“; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

}

基数 : OnLoad(e) ;

}

&lt;/说明&gt;

&lt;asp: PlaceHolder ID= “ PlaceHolder1” 运行数= “ 服务器” 查看状态Mode= “ 残疾 ”&gt;

残疾: &lt;注意 : 标签 ID= “ 标签 1 ” 运行 = “ 服务器 ” 文本= ”[宣布价值]"/&gt;&lt;b b b /&gt;

&lt;问号: PlaceHolder ID= “ PlaceHolder2” 运行= “ 服务器” 查看状态Mode = “ 启用 ”&gt;

已启用 : &lt;提醒: 标签 ID= “ label2 ” runat = “ 服务器 ” 文本= ”[宣布价值]"/&gt;

&lt;草 草: PlaceHolder&gt;

&lt;草 草: PlaceHolder&gt;

&lt;hr /&gt;

&lt;ASp: 按键 ID= “ 按钮 1 ” runat= “ 服务器 ” 文本= “ 后退 ” /&gt;

您可以在此样本中看到, 我们为 PlaceHolder1 控制禁用查看状态, 儿童标签1 继承了此属性( 继承者默认) , 因此没有保存任何视图状态 在 PlaceHolder2 中, 我们设置 View StateMode 为“  Enabled ” , 这导致标签2 继承了此属性, 因此保存了 View State 在首页加载中, 我们为输出文本设定了两个标签 。 [动态价值]

这一切的效果是,当Page首次加载时,你可以看到以下标签:

残疾: [动态价值]

已启用 : [动态价值]

但是,做一个PostBack,你可以看到:

残疾: [宣布价值]

已启用 : [动态价值]

正如你现在所期望的那样, 第一个标签没有保留我们放入View State的价值第二个标签就有了!

最酷的是,

&lt;頁面語言 = “ C # ” 自动視覺Wireup = “ true” Dufault. aspx. cs ” Inherits = “WebApplication 1 ”默认“ 查看状态模式” = “ 残疾” %&gt;

记住, 在 WebForms Page 中, 在 WebForms Page 中, 这只是另一个控件... 它作为页面中所有其他控件的父控件。 这意味着任何控件都不会保存 ViewState **除非您设置了要启用的视图状态模式** 因为控制或控制会进一步提升它的控制等级(因此,对主页的内容PlaceHolders将有很大的用处...)。

跟你说了很简单!