亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

Asp.net中static變量和viewstate的使用方法(謹慎)

2024-07-10 13:18:10
字體:
來源:轉載
供稿:網友

在.Net平臺下進行CS軟件開發時,我們經常遇到以后還要用到某些變量上次修改后的值,為了簡單起見,很多人都習慣用static來定義這些變量,我也是。這樣非常方便,下一次調用某個函數時該變量仍然保存的是處理過的值,直接拿來用就可以了。

現在轉入了BS軟件開發,我們很自然地會沿用這種習慣。如在頁面中統計某個按鈕被按下的次數,先在類中OnClick事件的處理過程前定義一static變量times,則每次調用該按鈕的OnClick事件時,令times增1即可,非常方便:
[C#]:

復制代碼 代碼如下:


...
static int times=0;
...
private void Button1_Click(object sender,EventArgs e)
{
times++;
Label1.Text=times.ToString();
}


在我們慶幸如此方便之余,就未曾意識到我們已經埋下了一棵難以察覺的定時炸彈。為什么哪?
這還要從Asp.net的運行機制談起。在CS模式軟件開發過程中,我們通常不會關心應用程序是在哪里運行的,變量存放在哪里,客戶端程序就運行在客戶端,服務器端程序就運行在服務器端,一般情況下,二者除了數據庫中的數據外基本沒有其他共享的東西。所以這時客戶端的用戶大可放心的使用static變量,因為它們就存放在客戶端程序中。

于是我們就習慣的在做BS模式的頁面時也用static變量,殊不知Asp.net中的static已不同于CS中的static。原因很簡單,就是因為在Asp.net中所有的用戶將使用同一個static變量。這就意味著每一個使用該頁面的用戶對該變量的操作將會影響到其他用戶。就拿上面計數器的例子來說,假設times初試值為0,因為此時只有我們自己在使用這個頁面,當然不會有什么問題,但如果有兩個人同時連接到這個頁面,如果A單擊了Button1一次,則B刷新頁面后Label1將顯示1,如果B再單擊Button1一次,則times變成2,兩個人刷新頁面后就出現問題了:A和B都會說,我明明只單擊了Button1一次,怎么Label1就顯示我單擊了兩次哪?——這就是因為兩個人共用的是服務器上同一個times,任何一個人對times的操作都會在使用該頁面的他人的瀏覽器中表現出來。問題就出在這里。

怎么辦哪?還好,除了傳統的Asp中的Session對象外,Asp.net提供了一個更好的ViewState對象。ViewState對象用來保存頁面中的各種變量,甚至是對象。使用方法和HashTable類似,只要用變量名稱做索引,如ViewState["Var"],就可以用存取變量Var的值,而不管Var是普通變量,還是對象,甚至是內存中的一張DataTable,太方便了。為什么可以用ViewState而不能用static變量哪?原因就是服務器端會為每個連接到該頁面的用戶分別建立一個ViewState,所以ViewState相當于頁面級的Session。這下我們可以放心地使用ViewState來存取需要暫存的變量和對象了。
ViewState的用法很簡單,如下所示:
1、保存變量到ViewState中:
ViewState["times"]=times;//存放普通變量times
ViewState["Orders"]=dtOrders;//存放DataTable型對象dtOrders
2、讀出ViewState中的值:
times=(int)ViewState["times"];
dtOrders=(DataTable)ViewState["Orders"];
看見了吧?就如此簡單!有的朋友會問讀出變量的值時為什么要進行強制類型轉換?這是因為當變量(不管是int型的普通變量times,還是DataTable型的對象dtOrders)被存放到ViewState中后,ViewState可不管你是普通變量還是對象,統統按Object來對待。所以當我們取出存放在ViewState中的東西時,一定要轉換成相應的類型,否則就會報錯。而這一操作不用在用ViewState保存變量時進行,系統會自動轉換。(注意ViewState括號中的字符串只是為了標識不同變量的索引,用不著非要和變量同名)所以上面計數器的代碼應該這樣寫才好:

復制代碼 代碼如下:


...
ViewState["times"]=0;
...
private void Button1_Click(object sender,EventArgs e)
{
int times=(int)ViewState["times"];
times++;
ViewState["times"]=times;
Label1.Text=times.ToString();
}


一般情況向下,將要保存到ViewState中的對象(或變量)用屬性的形式來實現會更方便。如對于上述的計數器times,可以這樣處理:

復制代碼 代碼如下:


...
private int times
{
get
{
return (int)ViewState["times"];
}
set
{
ViewState["times"]=value;
}
}
...
private void Button1_Click(object sender,EventArgs e)
{
times++;
Label1.Text=times.ToString();
}
...


在這里times將當作私有屬性來操作,是不是非常方便?
那是不是說static型變量就沒用了哪?當然不是!在C#中用static聲明的類不用實例化直接使用。正是由于所有用戶共享服務器端的同一個static變量,所以可以用static型對象來存取一些公用的處理模塊,比如類型轉換、變量驗證等工作。所以要根據具體情況而定。

還有一點需要注意:如果在頁面中多個過程要共享一個對象或變量,我們在頁面類的開始部分定義一個頁面級的全局變量是不行的,static本來可以,但上面說了這種類型的變量不安全,所以這時就可以用ViewState。

好了,這下我們可以放心的暫存某些變量或對象了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲视屏在线播放| 日韩欧美a级成人黄色| 91天堂在线观看| 北条麻妃在线一区二区| 国产69精品99久久久久久宅男| 成人av.网址在线网站| 亚洲伊人第一页| 久久人人爽人人爽人人片av高清| 国产一区二区在线免费| 国产91在线播放九色快色| 亚洲天堂成人在线视频| 国产精品久久久久久久久久三级| 国产精品91久久久久久| 中文国产成人精品久久一| 日韩网站免费观看高清| 亚洲跨种族黑人xxx| 久久久噜久噜久久综合| 亚洲情综合五月天| 欧美小视频在线| 欧美激情一区二区三级高清视频| 亚洲美女精品久久| 欧美猛交免费看| 亚洲激情久久久| 国产女精品视频网站免费| 亚洲激情在线观看| 日韩欧美中文第一页| 国产精品一区二区三区久久| 中文字幕欧美专区| 51色欧美片视频在线观看| 亚洲人成网7777777国产| 九九九热精品免费视频观看网站| 伊人亚洲福利一区二区三区| 欧美日韩免费区域视频在线观看| 中文字幕av日韩| 成人黄色av免费在线观看| 日韩欧美精品网站| 国产精品自产拍在线观看中文| 国产精品私拍pans大尺度在线| 97香蕉超级碰碰久久免费的优势| 91亚洲精华国产精华| 亚洲免费av网址| 91精品国产高清久久久久久91| 日韩综合视频在线观看| 国产亚洲一区二区在线| 中文字幕综合在线| 5252色成人免费视频| 97精品国产aⅴ7777| 在线观看精品自拍私拍| 国产视频精品自拍| 国产午夜精品久久久| 亚洲精品国产免费| 国产精品自产拍在线观看| 久久久精品一区二区三区| 黑人狂躁日本妞一区二区三区| 91av中文字幕| 福利一区福利二区微拍刺激| 国内精品免费午夜毛片| 国产91在线播放精品91| 亚洲欧美日本精品| 日韩视频免费在线观看| 成人高清视频观看www| 中文字幕视频在线免费欧美日韩综合在线看| 国产精品爱啪在线线免费观看| 精品国产一区二区三区久久狼5月| 久久久视频精品| 国产91精品黑色丝袜高跟鞋| 日韩欧美在线网址| 国产欧美一区二区三区久久| 日本aⅴ大伊香蕉精品视频| 国产精品v片在线观看不卡| 中文字幕少妇一区二区三区| 欧美在线国产精品| 国产精品免费观看在线| 国产成人一区二区在线| 91免费视频网站| 日本免费一区二区三区视频观看| 日本最新高清不卡中文字幕| 亚洲一区制服诱惑| 午夜精品理论片| 国产不卡视频在线| 欧美福利在线观看| 日韩精品欧美激情| 亚洲电影第1页| 在线播放亚洲激情| 日韩精品在线视频观看| 亚洲aaa激情| 91国产高清在线| 超碰91人人草人人干| 久久影院模特热| 久热精品视频在线观看| 日韩在线播放视频| 中文字幕在线看视频国产欧美在线看完整| 欧美激情一级二级| 亚洲精品欧美一区二区三区| 日韩精品免费在线视频| 精品免费在线观看| 激情懂色av一区av二区av| 97成人精品区在线播放| 日本在线精品视频| 日韩精品在线第一页| 欧美最猛性xxxxx免费| 国产一区二区香蕉| 九九热最新视频//这里只有精品| 992tv成人免费影院| 欧美日韩在线免费| 日韩欧美第一页| 欧美在线免费观看| 亚洲综合视频1区| 日本亚洲欧美成人| 正在播放国产一区| 国产精品老女人精品视频| 欧美多人爱爱视频网站| 麻豆国产精品va在线观看不卡| 久久久爽爽爽美女图片| 国产精品视频久久| 欧美午夜激情视频| 亚洲国产精彩中文乱码av| 久久国产精品久久久久| 日韩精品视频免费在线观看| 96国产粉嫩美女| 国产成人高清激情视频在线观看| 中文一区二区视频| 国产精品久久国产精品99gif| 国产欧美日韩高清| 欧美午夜精品在线| 欧美日韩一区二区免费视频| 国产suv精品一区二区三区88区| 欧美高清自拍一区| 久久免费少妇高潮久久精品99| 久久不射热爱视频精品| 欧美日韩第一页| 精品中文字幕视频| 欧洲美女免费图片一区| 欧美激情精品在线| 亚洲aa中文字幕| 日韩精品欧美激情| 久久精品视频va| 国产成人免费av电影| 欧美在线视频在线播放完整版免费观看| 久久天天躁狠狠躁夜夜躁2014| 午夜精品一区二区三区视频免费看| 91精品国产九九九久久久亚洲| 91大神福利视频在线| 欧美日韩精品中文字幕| 亚洲精品小视频在线观看| 最近2019年日本中文免费字幕| 中文字幕亚洲欧美在线| 国模视频一区二区三区| 欧美激情综合色综合啪啪五月| 欧美日韩爱爱视频| 欧美激情精品久久久久久变态| 欧美日韩成人在线观看| 久久婷婷国产麻豆91天堂| 国产精品成人v| 欧美日韩美女在线观看| 日韩欧美亚洲一二三区| 亚洲第一偷拍网| 成人久久久久久| 亚洲免费福利视频| 午夜精品www| 国产精品激情自拍| 久久久久久网站| 久久免费视频在线| 亚洲少妇中文在线|