国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

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

2024-07-10 12:41:01
字體:
來源:轉載
供稿:網友

在.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的用法很簡單,如下所示:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 兴业县| 钟祥市| 微博| 延边| 长岛县| 广昌县| 武清区| 桃江县| 武隆县| 哈尔滨市| 建始县| 杭锦旗| 南汇区| 伊春市| 尖扎县| 西畴县| 甘孜县| 上杭县| 乌兰察布市| 雷山县| 东宁县| 息烽县| 炎陵县| 锡林浩特市| 清远市| 四平市| 会东县| 化州市| 易门县| 宁夏| 旬阳县| 军事| 城步| 乐山市| 沁阳市| 武冈市| 奎屯市| 金乡县| 肇源县| 新巴尔虎右旗| 康马县|