日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

ASP.NET 高級(jí)編程基礎(chǔ)第三篇—ViewState

 昵稱(chēng)10504424 2012-08-13

ASP.NET 高級(jí)編程基礎(chǔ)第三篇—ViewState

前言:前面兩篇讓我們先了解了ASP.NET的一些基礎(chǔ)知識(shí),從這篇博客開(kāi)始講解我們?cè)陂_(kāi)發(fā)一個(gè)系統(tǒng)或者網(wǎng)站的時(shí)候用到的最多的技術(shù),比如:如何合理的使用ViewState還有HTTP協(xié)議以及在ASP.NET中如何使用Session和cookie。下面就讓我們盡情的歡呼吧,說(shuō)明一下,我的系列來(lái)自我現(xiàn)在正在學(xué)習(xí)的黑馬楊中科老師的講座

  1. ViewState初探

(1) Label版本的值存到了viewstate中,TextBox版本的不用存,因?yàn)門(mén)extBox就是input,自己就會(huì)提交給服務(wù)器,不需要隱藏字段。

(2) 用asp.net重寫(xiě)Div文本自增(還要同時(shí)遞增Label的寬度,注意Width的單位是unit類(lèi)型,不是簡(jiǎn)單的int)。

Label.Text=((Convert.ToInt32(Label.Text)+1).ToString();

Label.Width=new unit(Label.Width.Value+10);

(3) 查看生成的源代碼,asp.net將所有隱藏的內(nèi)容統(tǒng)一放到了名字為”_VIEWSTATE”的隱藏字段中,使用序列化算法將所有隱藏內(nèi)容放到一個(gè)字符串中,點(diǎn)擊按鈕幾次然后使用ViewStateDecoder這個(gè)工具查看viewstate內(nèi)容,發(fā)現(xiàn)了確實(shí)將這些改變了的內(nèi)容放到了viewstate中。

(4) 禁用ViewState的方法,enableviewstate=false,禁用viewstate以后textbox版本的不受任何的影響,Div版本的受影響,因?yàn)閕nput的value不依靠ViewState。

(5) 回答ViewState原理的時(shí)候:說(shuō)Input版本(TextBox自增和Div版本(Label)的不同)。

例如:新建一個(gè)Web項(xiàng)目,拖放一個(gè)TextBox控件和按鈕控件,將TextBox的值設(shè)置為0,點(diǎn)擊按鈕TextBox的值和寬度全部自增,在按鈕事件下面寫(xiě):

復(fù)制代碼
1   int i = Convert.ToInt32(TextBox1.Text);
2 
3      i++;
4 
5     TextBox1.Text = i.ToString();
6 
7     TextBox1.Width = new Unit(TextBox1.Width.Value + 10);
復(fù)制代碼

 

  1. 無(wú)狀態(tài)Http

(1) Http協(xié)議是沒(méi)有狀態(tài)的,不會(huì)記得上次和網(wǎng)頁(yè)”發(fā)生了什么”,如果要知道上一次的狀態(tài),一個(gè)方法是在對(duì)瀏覽器響應(yīng)結(jié)束之前將狀態(tài)信息保存到頁(yè)面表單中,下次頁(yè)面再向服務(wù)器發(fā)出請(qǐng)求的時(shí)候帶上這些狀態(tài)信息,這樣服務(wù)器就能根據(jù)這些狀態(tài)信息還原上次的狀態(tài)了,服務(wù)器不記得上次給了瀏覽器什么,瀏覽器需要記住這些值(input就是記到value中,對(duì)于其他的值就要放到隱藏字段中,比如:ViewState),下次再提交服務(wù)器的時(shí)候(請(qǐng)?jiān)谖业膶挾然A(chǔ)上增加10),就是把上次的值提交給服務(wù)器,讓他想起來(lái)。

(2) 狀態(tài)信息保存到隱藏字段中的缺點(diǎn),加大網(wǎng)站的流量,降低訪問(wèn)速度,機(jī)密數(shù)據(jù)放到表單中會(huì)有數(shù)據(jù)欺騙等安全性問(wèn)題。

1   Response.Write("Label的值為:" + Label1.Text + "<br />"); //禁用了ViewState就讀不到上次給客戶(hù)端的值
2 
3      Label1.Text = "100";  //即使禁用ViewState,寫(xiě)入瀏覽器的值不會(huì)受影響
4 
5      Response.Write("Label的值為" + Label1.Text + "<br />"); //及時(shí)禁用了viewstate,在請(qǐng)求沒(méi)有結(jié)束之前也能讀出來(lái)設(shè)置的值

 

  1. ASP.NET中使用Cookie

(1) 首先新建兩個(gè)Web頁(yè)面,Cookie1.aspx和Cookie2.aspx,第一個(gè)頁(yè)面設(shè)置Cookie,第二個(gè)頁(yè)面讀取Cookie,在第一個(gè)頁(yè)面中放入TextBox和Button控件,在第二個(gè)頁(yè)面中放入Label和Button控件,在兩個(gè)頁(yè)面的Button時(shí)間下面寫(xiě)如下代碼:

 1) 設(shè)置值的頁(yè)面

 

復(fù)制代碼
1    protected void Button1_Click(object sender, EventArgs e)
2 
3     {
4 
5         Response.SetCookie(new HttpCookie("Color", TextBox1.Text)); //在客戶(hù)端也能通過(guò)$.cookie取值,服務(wù)端設(shè)置Cookie
6 
7     }
復(fù)制代碼

 

 2) 讀取值的頁(yè)面

 

復(fù)制代碼
1     protected void Button1_Click(object sender, EventArgs e)
2 
3     {
4 
5         Label1.Text = Request.Cookies["Color"].Value; //服務(wù)端讀取Cookie
6 
7     }
復(fù)制代碼

 

(2) 表單是和頁(yè)面相關(guān)的,只有瀏覽器端提交了這些數(shù)據(jù),服務(wù)器端才能夠得到,而有時(shí)候希望在服務(wù)端任意的地方存放一些和訪問(wèn)者相關(guān)的信息,這時(shí)候就不方便將這些信息保存到表單了,因此如果那樣的話必須隨時(shí)注意在所有頁(yè)面表單中都保存這些信息,Cookie是和站點(diǎn)相關(guān)的,并且每次向服務(wù)器請(qǐng)求的時(shí)候出了發(fā)送表單參數(shù)外,還會(huì)將和站點(diǎn)相關(guān)的所有Cookie都提交給服務(wù)器,是強(qiáng)制性的Cookie也是保存在瀏覽器端的,而且瀏覽器每次請(qǐng)求的時(shí)候都會(huì)把和這個(gè)站點(diǎn)相關(guān)的Cookie提交到服務(wù)器,并且將服務(wù)器端返回的Cookie更行會(huì)數(shù)據(jù)庫(kù),因此可以將信息保存在Cookie中,然后在服務(wù)器端讀取,修改,服務(wù)器返回?cái)?shù)據(jù)出了普通的Html數(shù)據(jù)以外,還會(huì)返回修改的Cookie,瀏覽器把拿到的Cookie值更新本地瀏覽器的Cookie就可以。

(3) 互聯(lián)網(wǎng)優(yōu)化的案例:圖片服務(wù)器和主站域名不一樣,降低Cookie流量的傳輸。

(4) Cookie的缺點(diǎn)和表單一樣,而且還不能存儲(chǔ)過(guò)多信息

例如:全局變量和局部變量對(duì)頁(yè)面的影響

新建一個(gè)web頁(yè)面,拖放一個(gè)Label控件和Button控件

   

復(fù)制代碼
 1 private int i = 0; //每次請(qǐng)求來(lái)了都會(huì)new一個(gè)新的實(shí)例實(shí)現(xiàn)了IHttpHandel接口的類(lèi)(變量1)的實(shí)例進(jìn)行處理,用完了就垃圾回收,所以不會(huì)保持上次的數(shù)值
 2 
 3     private static int j = 0;  //所有的訪問(wèn)者都王文同一個(gè)實(shí)例
 4 
 5     protected void Page_Load(object sender, EventArgs e)
 6 
 7     {
 8 
 9  
10 
11     }
12 
13     protected void Button2_Click(object sender, EventArgs e)
14 
15     {
16 
17         //i++;
18 
19         //Label1.Text = i.ToString();
20 
21         j++;
22 
23         Label1.Text = j.ToString();
24 
25     }
復(fù)制代碼

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多