假設我在頁面上有5個按鈕,編號爲1-5。Viewstate,我理解正確嗎?
單擊一個值時,具有viewtate getter/setter的值會將此值指定爲單擊的按鈕值。
如果我正在檢查Page_Init()/ OnInit()中的值,在發生回發之後,該值將始終爲空/空值。
這是正確的嗎?
如果是這樣,還有什麼我可以做的,不需要架構改變?或者我可以使用類似的東西來保持發佈後的變化(不幸的是,Session []不好)。
假設我在頁面上有5個按鈕,編號爲1-5。Viewstate,我理解正確嗎?
單擊一個值時,具有viewtate getter/setter的值會將此值指定爲單擊的按鈕值。
如果我正在檢查Page_Init()/ OnInit()中的值,在發生回發之後,該值將始終爲空/空值。
這是正確的嗎?
如果是這樣,還有什麼我可以做的,不需要架構改變?或者我可以使用類似的東西來保持發佈後的變化(不幸的是,Session []不好)。
ViewState存儲頁面狀態(頁面和控制設置+存儲在ViewState中的自定義值),並在後發之間進行存儲。它只是隱藏字段,帶有序列化(和加密)的狀態數據。當您在後面的代碼中將ViewState設置爲ViewState時,會將其與頁面標記一起傳輸到客戶端,並在下一個Postback中重新發布到服務器。頁面life cycle(在InitComplete和PreLoad之間)從ViewState反序列化狀態。這就是您無法從OnInit中的ViewState訪問數據的原因。
參考: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
頁:初始化早
我不是100%肯定你」在這裏再問一次,但這聽起來像是ASP.NET Page Lifecycle的問題。它讓每個人都去旅行!
基本上,開發者希望能夠在Page_Init(或更常見的是Page_Load)中做一些工作,但觸發回發的任何事件的點擊事件還沒有發生。
事實上,當Page_Init觸發時,iirc ViewState還沒有被反序列化。
我不能告訴你哪裏做的任何工作需要做的正確的地方是不知道更多,但你可能想要將一些在Page_Init中的代碼移動到生命週期中稍後的事件處理程序中。
你可以自己看到這個:在Page_Init開始時彈出一個斷點,在MyButton_Click開始時彈出一個斷點,你會看到Page_Init首先被觸發。
您可以使用Request.Form [「idofbutton」]來獲取發佈的值。這是作爲http協議的一部分發生的。通過類似於螢火蟲的方式檢查http請求/響應,以查看發佈的內容。