ASP.NET 4.0引入的视图状态属性ViewStateMode与原EnableViewState的区别

来源:互联网 发布:mac迅雷下载速度0 编辑:程序博客网 时间:2024/05/19 14:53

        ASP.NET还在继续完善WebForm中的视图状态管理。例如,ASP.NET 4.0引入了控件视图状态属性ViewStateMode,该属性可以取值Disabled、Enabled或Inherit。那么,该属性与原来的视图状态属性EnableViewState有何区别呢?

  • EnableViewState可以在UI控件(即asp:类型的控件)和服务器html元素(即html元素带runat="server"属性)中使用,ViewStateMode只能在UI控件中使用。
  • 如果是单一控件中设置这两个视图状态属性的值,则Disabled或false表示关闭视图状态。
  • 如果在父控件(例如Page)设置了EnableViewState="false",则该控件所有的子控件的视图状态将被关闭,不论使用EnableViewState还是ViewStateMode;如果设置父控件的EnableViewState="true"(或默认),那么子控件可以使用EnableViewState或ViewStateMode继承或关闭视图状态。
  • 如果在父控件(例如Page)设置了ViewStateMode="Disabled",在该控件的子控件中不能使用EnableViewState="true"启用视图状态,但可以使用ViewStateMode="Enabled"启用;如果在父控件(例如Page)设置了ViewStateMode="true",则子控件可以使用EnableViewState或ViewStateMode关闭视图状态。

        总之,在ASP.NET 4.0及之后的版本中,可以使用ViewStateMode独立设置一个控件的视图状态,而不需要考虑其父控件的视图状态。显然,该属性弥补了EnableViewState在父控件关闭视图状态后子控件的视图状态设置不灵活的问题。因此,在4.0之后,一般使用ViewStateMode代替EnableViewState。

        以下是测试用的网页代码(ASPX部分)

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ViewState.aspx.cs" Inherits="Controls.ViewState" ViewStateMode="Enabled" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>    <title></title></head><body>    <form id="form1" runat="server">    <div>        <asp:Label ID="Label1" runat="server" Text="Label" EnableViewState="false"></asp:Label>        <asp:Button ID="Button1" runat="server" Text="Button" />    </div>    </form></body></html>
        以下是测试用的代码隐藏类代码(ASPX.CS部分)。
using System;namespace Controls{    public partial class ViewState : System.Web.UI.Page    {        protected void Page_Load(object sender, EventArgs e)        {            if (IsPostBack == false)  // 首次加载时将显示时间            {                Label1.Text = DateTime.Now.ToString();            }        }    }}
        测试时,第一次加载网页时将显示时间。点击按钮,如果启用了Label的视图状态,则仍然显示时间;如果关闭了Label的视图状态,则不会显示内容。

0 0
原创粉丝点击