正如你看到的,代码中禁用了PlaceHolder1控件的视图状态。子控件Label1继承此属性值(Inherit是针对控件的ViewStateMode提供的默认值。),因此没有保存任何视图状态。在PlaceHolder2控件中,ViewStateMode设置为Enabled,因此Label2控件继承了此属性并保存视图状态。当页面第一次加载时,两个Label控件的Text属性都被设置为字符串“[DynamicValue]”。
这些设置效果是,当页面首次加载时,将在浏览器端显示以下输出:
Enabled: [DynamicValue]
但是在发生页面回寄后,显示如下的输出内容:
Enabled: [DynamicValue]
正如你可能料想到的,Label1(其ViewStateMode值设置为Disabled)并没有保存在代码中设置的值。然而,Label2(其ViewStateMode值设置为Enabled)保留了其状态。
您还可以在@ Page指令中设置ViewStateMode,如下面的例子所示:
CodeBehind="Default.aspx.cs"
Inherits="WebApplication1._Default"
ViewStateMode="Disabled" %>
Page类仅仅是另一个控件而已,它承担了所有页面中其他控件的父控件行为。对于Page对象来说,ViewStateMode的默认值为Enabled。由于控件默认为Inherit类型,控件将继承Enabled属性值,除非您在页面或控件级上设置ViewStateMode。
ViewStateMode属性的值决定了仅当EnableViewState属性设置为true时是否维持视图状态。如果EnableViewState属性设置为false,视图状态将不能保持,即使ViewStateMode设置为Enabled。
此特征的一个不错的应用是在母版页面中使用ContentPlaceHolder控件。此时,您可以把母版页面的ViewStateMode设置为Disabled,然后针对个别的包含需要视图状态的控件中的ContentPlaceHolder控件启用这一功能。