不知道要如何命名比較好
這篇是一個ASP.NET技術:「ViewState」的討論
覺得很是重要,因為常常在抓取控制項的數值時出了錯,報錯常見和ViewState相關
所以特別拿出來研究研究
當然也不是自已的成果啦
只是把高手們的資料看看自已測試一下
先把結果寫出來,有興趣的再往下看吧
結果:
◎以上程式範例AspNet12.aspx,如在頁框下不能操作,請開新視窗操作
◎如果有問題歡迎您提出,dnowba很需要有人和我一起討論
Partial Class AspNet12 Inherits System.Web.UI.Page Dim i As Integer Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load ' ===== 關於Viewstate:按鈕之後,數值累加1 ===== ' 以下二個結論: ' 1、在使用時可以發現 ' http 是一個 stateless(無狀態) 的協定 ' 用最原始的response來做是不能累加的,因為 ' 當傳遞完值後就關閉和server的連接 ' 而ASP.NET不同處在於在值傳遞過程,都會紀錄每個「控制項」的狀態(viewstate) ' 2、如果把button1_click()裡的事件改放到Page_Load()裡 ' 不管按下什麼控制項,都會發現Page_Load都會被觸發 ' 這是Page_Load的特性 ' 是以往傳統程式一個項一個事件,不按就沒有事件被執行的觀念不同 ' 所以我們常在每個Page_Load裡面寫一段判別式,如下: 'If Not Page.IsPostBack = True Then ' 這邊就是指第一次開啟web應用程序 ' else ' 這邊的敘述句就是指第二、三、四、五…次讀取頁面 'End If If Not Page.IsPostBack = True Then ' 也因為控制項的狀態被紀錄過一次了,所以可以用Page.IsPostBack來判定 ' 就算重新載入了,該控制項的「屬性」還是會被保留住 Me.Label1.ForeColor = Drawing.Color.Red Me.Label1.Text = 0 End If ' 不給初始值=0的話,後面累加1的時候會報錯,即便vb這麼青菜,還是不給加字串的,所以 ' 我們給他「方便」辯識用,初始值給他設定為 0,讓VB自動把這個「值」當成是「數字」。 ' c# 就不可以這樣做了,c#較嚴謹,需要設定好每個變數的型別 End Sub Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click ' 用最原始的response來做是不能累加的 ' i = i + 1 ' Response.Write(i) ' 而用控制項的話,因為viewstate的關係,就能累加 ' 底下用的Cint來將值轉化成int整數,是比較正式的寫法,不寫也行 Me.Label1.Text = CInt(Me.Label1.Text) + 1 End Sub End Class