不知道要如何命名比較好
這篇是一個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