从运行的ASP.NET应用程序中,首先注意的是页面的会送(sòng)功能(néng)。这(zhè)对于开发人员真(zhēn)的是一个好处,开发人员不用手动(dòng)保存(cún)服务器的每次往返之间的信息(xī)。ASP.NET为服务的服务(wù)器(qì)控件(jiàn)(服务器控件使用runat=’”server”属性指定)提供视图(tú)状(zhuàng)态。当ASP.NET为(wéi)HTML的形式呈现页面时(shí),它创建一个隐藏的窗体字(zì)段,成为(wéi)_ViEWSTATE。这个字段是一个加密的、标记化得字符串(可以通过工具ViewStateDecoder查看,可以到网(wǎng)上(shàng)下载),包含ASP.NET页(yè)面上每个控件的名(míng)/值(zhí)对(duì)。每个控件存储的值实际上时控件关联的(de)值和状态信息。当页面(miàn)被发送到服(fú)务器是,ASP.NET可以(yǐ)轻松地使用这些值并重(chóng)新构建页面(miàn)控(kòng)件,控(kòng)件的(de)值(zhí)和状态(tài),不(bú)用(yòng)开发(fā)人员编写代码(mǎ)。

创建一个(gè)ASP.NET页面PageViewStateDemo.aspx实现一个文本(běn)框,两个按钮(niǔ)实现文本框的(de)隐藏和显示,以说明ViewState字段值是如何工作的。
页面代码如下:
<formid="form1"runat="server">
<div><br/><br/><br/><br/>
</div>
<divstyle="display:inline; z-index:101; left:16px; width:70px; position:absolute;
top:25px; height:15px">Test Field</div>
<asp:TextBoxID="txtName"style="z-index:106; left:101px; position:absolute;
top:23px"runat="server"></asp:TextBox>
<asp:ButtonID="btnHide"
style="z-index:111; left:15px; position:absolute; top:59px;"runat="server"
Width="61px"Text="Hide"onclick="btnHide_Click" />
<asp:ButtonID="btnShow"
style="z-index:112; left:95px; position:absolute; top:59px;"runat="server"
Width="61px"Text="Show"onclick="btnShow_Click" />
</form>
后台代码很简(jiǎn)单:
protected void btnHide_Click(object sender, EventArgs e) { this.txtName.Visible = false; } protected void btnShow_Click(object sender, EventArgs e) { this.txtName.Visible = true; }
在浏览器(qì)查看该(gāi)页面,在(zài)ASP.NET页面返回后查看其源(yuán)代码:

利用刚才提到(dào)的ViewState查看工(gōng)具ViewStateDecoder查看ViewState:

点击Hide按钮再看源代码:

可(kě)以看(kàn)到ViewState的值不一(yī)样(yàng)了:

ViewState在(zài)开发Web页面是确实(shí)可以节(jiē)约时间。但是,它(tā)有性能成本。在上面的例子可以(yǐ)看(kàn)出,对服(fú)务(wù)器控件(jiàn)的一个属性的最轻微的修改也会改变(biàn)视图状(zhuàng)态的大小。在页面中添(tiān)加10到(dào)20个简(jiǎn)单(dān)的服务器控件(jiàn),和几(jǐ)个(gè)高(gāo)级的服(fú)务器控(kòng)件,可以(yǐ)看到呈现HTML的大小可(kě)以变成应(yīng)用程序的一个瓶颈,尤其是对(duì)于带(dài)宽有限的用户来说。
为了提高ASP.NET应用程序的性能,必须得控制(zhì)服务器控件的使用以降低呈现的HTML的大小。控制服务器控件的手段就是在不需要服务器的(de)代码执(zhí)行期间在不需要与控件交(jiāo)互时使用静(jìng)态的HTML控件。
对一个正常的HTML控件使用runat=“server”属(shǔ)性,它就可以从服务器(qì)端的代码中访问,并且和(hé)ASP.NET服(fú)务器控件具有相同(tóng)的性能损失。
禁用ViewState的方式(shì)有:
1、禁用控件的ViewState
<asp:TextBox ID="TextBox1" EnableViewState="false" runat="server"></asp:TextBox>
设置TextBox1的ASP.NET文(wén)本(běn)框在视图状态中(zhōng)不再(zài)保存任何(hé)信(xìn)息。但不会影响页(yè)面中其他控件或页面(miàn)本身(shēn)的ViewState信息。
2、禁用页面的ViewState
<%@ Page Language="C#" AutoEventWireup="true" EnableViewState="false" %>
禁(jìn)用用(yòng)户控件的ViewState跟禁用页面的ViewState类型也是设(shè)置其EnableViewState="false" 。
3、禁用应用程序的(de)ViewState