asp.net 视图状态原理

万维网(world wide web)的基本协议是 HTTP 协议,是一种无状态的协议,每一次页面发出的请求对于服务器来说都是新的。

ASP.NET Framework 成功突破的 HTTP 协议的限制,例如给Label 空间的 Text 属性赋一个值,Label 会在页面多次请求之间保存这个值,那这个值是如何保存的呢?

下面请看代码:

-----------------------------------------------------------------------------------------------------

<%@ Page Language="C#" Trace="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    protected void Button1_Click(object sender, EventArgs e)

    {

        Label1.Text = (Int32.Parse(Label1.Text) + 1).ToString();

    }

</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="0"></asp:Label><br />

        <asp:DropDownList

            ID="DropDownList1" runat="server">

            <asp:ListItem Text="选择框" Value="0"></asp:ListItem>

            <asp:ListItem Text="选择1" Value="1" />

        </asp:DropDownList>

    </div>

    <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />

    </form>

</body>

</html>

---------------------------------------------------------------------------------------

我们运行了以上代码就会发现在生产的HTML代码中存在 <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNjY2NzE5NTQ5D2QWAgIED2QWAgIBDw8WAh4EVGV4dAUBNWRkZBLujmFDkSLFCddbESB5E6G9ib0WjFb9EjqblCn46L0N" />

ASP.NET FrameWork 使用了__VIEWSTATE 来保存页面的状态,这个隐藏的表单包含了页面所有空间的属性与值,当页面回传服务器的过程中,Asp.net Framework 就对这个字符窜就行分解,重建保存在视图状态中的所有属性的值。

默认情况下ASP.NET 是启用视图状体的,如需要查看具体情况可以在 @Page 中 启用 Trace = "true" 页面跟踪。

原文地址:https://www.cnblogs.com/9988/p/2152152.html