2010-10-11 79 views
0

假設我在頁面上有5個按鈕,編號爲1-5。Viewstate,我理解正確嗎?

單擊一個值時,具有viewtate getter/setter的值會將此值指定爲單擊的按鈕值。

如果我正在檢查Page_Init()/ OnInit()中的值,在發生回發之後,該值將始終爲空/空值。

這是正確的嗎?

如果是這樣,還有什麼我可以做的,不需要架構改變?或者我可以使用類似的東西來保持發佈後的變化(不幸的是,Session []不好)。

回答

3

ViewState存儲頁面狀態(頁面和控制設置+存儲在ViewState中的自定義值),並在後發之間進行存儲。它只是隱藏字段,帶有序列化(和加密)的狀態數據。當您在後面的代碼中將ViewState設置爲ViewState時,會將其與頁面標記一起傳輸到客戶端,並在下一個Postback中重新發布到服務器。頁面life cycle(在InitComplete和PreLoad之間)從ViewState反序列化狀態。這就是您無法從OnInit中的ViewState訪問數據的原因。

1

參考:HTTP://code.google.com/p/citiport2/wiki/All_Events

Page: AddParsedSubObject 
Page: CreateControlCollection 
Page: AddedControl 
Page: AddParsedSubObject 
Page: AddedControl 
Page: ResolveAdapter 
Page: DeterminePostBackMode 
Page: PreInit 
Control: ResolveAdapter 
Control: Init 
Control: TrackViewState 
Page: Init 
Page: TrackViewState 
Page: InitComplete 
Page: LoadPageStateFromPersistenceMedium 
Control: LoadViewState 
Page: EnsureChildControls 
Page: CreateChildControls 
Page: PreLoad 
Page: Load 
Control: DataBind 
Control: Load 
Page: EnsureChildControls 
Page: LoadComplete 
Page: EnsureChildControls 
Page: PreRender 
Control: EnsureChildControls 
Control: PreRender 
Page: PreRenderComplete 
Page: SaveViewState 
Control: SaveViewState 
Page: SaveViewState 
Control: SaveViewState 
Page: SavePageStateToPersistenceMedium 
Page: SaveStateComplete 
Page: CreateHtmlTextWriter 
Page: RenderControl 
Page: Render 
Page: RenderChildren 
Control: RenderControl 
Page: VerifyRenderingInServerForm 
Page: CreateHtmlTextWriter 
Control: Unload 
Control: Dispose 
Page: Unload 
Page: Dispose 

頁:初始化早

1

我不是100%肯定你」在這裏再問一次,但這聽起來像是ASP.NET Page Lifecycle的問題。它讓每個人都去旅行!

基本上,開發者希望能夠在Page_Init(或更常見的是Page_Load)中做一些工作,但觸發回發的任何事件的點擊事件還沒有發生

事實上,當Page_Init觸發時,iirc ViewState還沒有被反序列化。

我不能告訴你哪裏做的任何工作需要做的正確的地方是不知道更多,但你可能想要將一些在Page_Init中的代碼移動到生命週期中稍後的事件處理程序中。

你可以自己看到這個:在Page_Init開始時彈出一個斷點,在MyButton_Click開始時彈出一個斷點,你會看到Page_Init首先被觸發。

0

您可以使用Request.Form [「idofbutton」]來獲取發佈的值。這是作爲http協議的一部分發生的。通過類似於螢火蟲的方式檢查http請求/響應,以查看發佈的內容。