Viewstate,我理解正确吗?

时间:2010-10-11 09:56:13

标签: c# asp.net viewstate

假设我在页面上有5个按钮,编号为1-5。

单击一个时,带有viewtate getter / setter的值会将此按钮的值指定为该值。

如果我在Page_Init()/ OnInit()中检查一个值,则在回发发生后,该值将始终为空/ null。

这是对的吗?

如果是这样,还有什么我可以做的不需要架构改变吗?或类似的东西我可以用来在帖子后面保持更改(Session []不幸的是不幸)。

4 个答案:

答案 0 :(得分:3)

ViewState在回发之间存储页面状态(页面和控件设置+存储在ViewState中的自定义值)。它只是具有序列化(和加密)状态数据的隐藏字段。当您在代码后面设置ViewState时,会将页面标记转移到客户端,并在下一个Postback中回发到服务器。页面life cycle(在InitComplete和PreLoad之间)从ViewState反序列化状态。这就是为什么你不能在OnInit中从ViewState访问数据的原因。

答案 1 :(得分: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

页面:Init早于

答案 2 :(得分:1)

我不是100%肯定你在这里问的是什么,但这听起来像ASP.NET Page Lifecycle的问题。它绊倒了所有人!

基本上,发生的事情是开发人员希望能够在Page_Init(或更常见的Page_Load)中执行某些工作,但针对触发回发的任何事件尚未发生的点击事件

事实上,当Page_Init触发时,iirc ViewState甚至没有被反序列化。

我不能告诉你在哪里做正确的工作需要做的事情是在不知道更多的情况下,但是你可能想在生命周期的后期将一些Page_Init中的代码移动到事件处理程序中。

你可以自己看到:在Page_Init的开头弹出一个断点,在MyButton_Click的开头弹出另一个断点,你会看到Page_Init首先触发。

答案 3 :(得分:0)

您可以使用Request.Form [“idofbutton”]来获取发布的值。这是作为http协议的一部分发生的。检查像firebug这样的http请求/响应,看看发布了什么。

相关问题