• EnableViewState 属性


    指示是否在页请求之间保持视图状态。如果要保持视图状态,则为 true;否则为 false。默认值为 true。

    自己总结

    加了EnableViewState="false" 若没造成影响,请尽量加上去

    =======================以下转载===================

    以上为官方对 EnableViewState 的解释,有些难懂,我们以示例的方式解释,我们创建一个 Web Form,并添加一个 ListBox、一个 Button、一个方法。

    程序代码

    <%@ Page Language="C#" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <script runat="server">
        void AddItem(object sender, EventArgs e)
        {
            list.Items.Add(DateTime.Now.Ticks.ToString());
        }
    </script>

    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>EnableViewState 属性</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
          <asp:ListBox ID="list" runat="server">
            <asp:ListItem Text="EnableViewState 属性" Value="1"></asp:ListItem>
          </asp:ListBox>
          <asp:Button ID="btn" runat="server" Text="追加一个 Item" OnClick="AddItem" />
        </div>
        </form>
    </body>
    </html>

    在浏览器中访问该网页,得到 HTML 源文件中如下内容:

    <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTIyNTcyODQzNWRkKV9J6dx90HkLpaqCRtS3s4xsNnc=" />

    这个 hidden 框存储的是各个控件的属性值与状态,比如 ListBox 的 Text、Value、Selected 等,这也是为什么在 ASP.NET 里,可以在服务器端获得列表的 Text 值的原因。

    开始实验

    现在点击按钮,服务器端将执行 AddItem 方法,ListBox 中的内容也随之增多,查看 HTML 源文件中的“__VIEWSTATE”也随之增多 。

    再次实验

    现在我们修改 ListBox 的 EnableViewState 属性为 false。

    <asp:ListBox ID="list" runat="server" EnableViewState="false">

    再次点击几下按钮,我们可以发现,之前点击按钮添加的 Item 都不见了,现在每次点击按钮,ListBox 中都只有两个 Item,一个为静态指定的,一个是通过 AddItem 方法添加的。这是由于 ListBox 的内容没有通过“__VIEWSTATE”传送到服务器端,服务器端不知道 ListBox 之前还动态添加的有内容。

    注意观察,添加的数字并不相同,这说明每次点击都执行了 AddItem 方法,而不是有些文章所说的,使用 EnableViewState="false" 时方法只执行一次,方法是每次都执行,只是由于关闭了视图状态后,服务端没有获得之前动态添加(编辑、删除)后的内容(还是页面设置的属性值),所以只有最新添加(编辑、删除)的内容。

    以下的例子再次说明一下(还是页面设置的属性值这句话)

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <script runat="server">  
        void AddItem(object sender, EventArgs e)
        {      

        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                Label1.Text = "IsPostBack时赋值的";
            }
        }
    </script>

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:Label ID="Label1" runat="server" Text="Label" ></asp:Label>
            <asp:Button ID="btn" runat="server" Text="追加字符串" OnClick="AddItem" />
        </div>
        </form>
    </body>
    </html>

    结果:IsPostBack时赋值的

    当给Label1添加EnableViewState="false",

    结果:Label

    这里我想关注的是:没有ViewState时,当服务器端获取的控件的当前值是他的页面里属性设置的值(这里Text="Label" )。

    总结

    EnableViewState 指定是否向服务器端传送某(些)控件的属性值、状态。

    EnableViewState 的默认值为 true,设置为 false 可以降低数据传送量,当然应该在程序逻辑允许设置为 false 的情况下。

    EnableViewState 可用于控件,也可用于 @ Page@ Control@ Master 指令语法。当控件的 EnableViewState 的设置与指令语法的设置不一致时,取 false 值。

    引用:http://hi.baidu.com/handboy/blog/item/89282d16d3c4db5bf3de3218.html

  • 相关阅读:
    java 找不到或无法加载主类
    navicat connect error: Authentication plugin 'caching_sha2_password' cannot be loaded
    mysql command
    the diffirent between step into and step over (java)
    20181015
    Eclipse
    游戏2048源代码
    vue的生命周期
    简单快速了解Vue.js的开发流程
    C# 连接西门子PLC
  • 原文地址:https://www.cnblogs.com/chencidi/p/1963614.html
Copyright © 2020-2023  润新知