從運行的ASP.NET應用程序中,首先注意的是頁(yè)面的會(huì )送功能。這對于開(kāi)發(fā)人員真的是一個(gè)好處,開(kāi)發(fā)人員不用手動(dòng)保存服務(wù)器的每次往返之間的信息。ASP.NET為服務(wù)的服務(wù)器控件(服務(wù)器控件使用runat=’”server”屬性指定)提供視圖狀態(tài)。當ASP.NET為HTML的形式呈現頁(yè)面時(shí),它創(chuàng )建一個(gè)隱藏的窗體字段,成為_(kāi)ViEWSTATE。這個(gè)字段是一個(gè)加密的、標記化得字符串(可以通過(guò)工具ViewStateDecoder查看,下載地址),包含ASP.NET頁(yè)面上每個(gè)控件的名/值對。每個(gè)控件存儲的值實(shí)際上時(shí)控件關(guān)聯(lián)的值和狀態(tài)信息。當頁(yè)面被發(fā)送到服務(wù)器是,ASP.NET可以輕松地使用這些值并重新構建頁(yè)面控件,控件的值和狀態(tài),不用開(kāi)發(fā)人員編寫(xiě)代碼。
創(chuàng )建一個(gè)ASP.NET頁(yè)面PageViewStateDemo.aspx實(shí)現一個(gè)文本框,兩個(gè)按鈕實(shí)現文本框的隱藏和顯示,以說(shuō)明ViewState字段值是如何工作的。頁(yè)面代碼如下:
<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;}
在瀏覽器查看該頁(yè)面,在A(yíng)SP.NET頁(yè)面返回后查看其源代碼:
利用剛才提到的ViewState查看工具ViewStateDecoder查看ViewState:
點(diǎn)擊Hide按鈕再看源代碼:
可以看到ViewState的值不一樣了:
ViewState在開(kāi)發(fā)Web頁(yè)面是確實(shí)可以節約時(shí)間。但是,它有性能成本。在上面的例子可以看出,對服務(wù)器控件的一個(gè)屬性的最輕微的修改也會(huì )改變視圖狀態(tài)的大小。在頁(yè)面中添加10到20個(gè)簡(jiǎn)單的服務(wù)器控件,和幾個(gè)高級的服務(wù)器控件,可以看到呈現HTML的大小可以變成應用程序的一個(gè)瓶頸,尤其是對于帶寬有限的用戶(hù)來(lái)說(shuō)。
為了提高ASP.NET應用程序的性能,必須得控制服務(wù)器控件的使用以降低呈現的HTML的大小??刂品?wù)器控件的手段就是在不需要服務(wù)器的代碼執行期間在不需要與控件交互時(shí)使用靜態(tài)的HTML控件。
對一個(gè)正常的HTML控件使用runat=“server”屬性,它就可以從服務(wù)器端的代碼中訪(fǎng)問(wèn),并且和ASP.NET服務(wù)器控件具有相同的性能損失。
禁用ViewState的方式有:
1、禁用控件的ViewState
<asp:TextBox ID="TextBox1" EnableViewState="false" runat="server"></asp:TextBox>
設置TextBox1的ASP.NET文本框在視圖狀態(tài)中不再保存任何信息。但不會(huì )影響頁(yè)面中其他控件或頁(yè)面本身的ViewState信息。
2、禁用頁(yè)面的ViewState
<%@ Page Language="C#" AutoEventWireup="true" EnableViewState="false" %>
禁用用戶(hù)控件的ViewState跟禁用頁(yè)面的ViewState類(lèi)型也是設置其EnableViewState="false" 。
3、禁用應用程序的ViewState
<pages enableViewState="false">
聯(lián)系客服