技术开发 频道

ASP.NET4与VS 2010Web开发之窗体改进

  正如你看到的,代码中禁用了PlaceHolder1控件的视图状态。子控件Label1继承此属性值(Inherit是针对控件的ViewStateMode提供的默认值。),因此没有保存任何视图状态。在PlaceHolder2控件中,ViewStateMode设置为Enabled,因此Label2控件继承了此属性并保存视图状态。当页面第一次加载时,两个Label控件的Text属性都被设置为字符串“[DynamicValue]”。

  这些设置效果是,当页面首次加载时,将在浏览器端显示以下输出:

Disabled: [DynamicValue]

  Enabled: [DynamicValue]

   但是在发生页面回寄后,显示如下的输出内容:

Disabled: [DeclaredValue]

Enabled: [DynamicValue]

    正如你可能料想到的,Label1(其ViewStateMode值设置为Disabled)并没有保存在代码中设置的值。然而,Label2(其ViewStateMode值设置为Enabled)保留了其状态。

  您还可以在@ Page指令中设置ViewStateMode,如下面的例子所示:

<%@ Page Language="C#" AutoEventWireup="true"
  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控件启用这一功能。

0
相关文章