以下是我的设置的基础知识:

我有一个继承自System.Web.UI.Page的BasePage类。 BasePage实现了两个属性,使得它们的get / set来自ViewState集合中的两个不同的项目(来自BasePage的ex.ViewState [" Year"])。

我有另一个继承自BasePage的类,我们称之为SpecificBasePage。

最后,我有一个继承了SpecificBasePage的aspx页面。

我添加了断点并完成了我的代码,并且发现在初始页面加载时,我的两个视图状态属性都被赋值,并且值在整个第一页加载生命周期中保持不变。

然而,当页面被回发时,在Page_Load事件和其他事件处理程序期间(应该加载ViewState时),两个属性都返回null。检查this.ViewState.Count显示集合中有零个对象。

任何人都可以想到我可能在某处影响ViewState并导致此行为的事情吗?

- 加法 我把它隔离到我的代码的一部分。在初始加载时,我在OnInit中给出了viewstate属性值,我发现当我将它移动到OnLoad时,值会在帖子后面保留。我猜即使添加的视图状态值在整个初始页面生命周期中仍然存在,它们会在帖子中被放弃吗?

有帮助吗?

解决方案

页面可能在aspx

上具有EnableViewState = false

也可能在应用程序的web.config上禁用,甚至可能在元素上的整个计算机上禁用。

更新1:在asp.net生命周期中,ViewState在Init之后加载,之后加载更多信息。看到它就像init上的任何内容被认为是页面声明的一部分。稍后asp.net将加载视图状态,之后它开始跟踪视图状态的更改。在此之后,asp.net将看到viewstate的初始信息和更改的信息之间的任何差异,因此将其移动到加载可以避免问题(因为初始状态不存在,并且新状态是您在viewstate上放置的任何内容) 。从上面的链接:

  

"原因是因为StateBag类   仅跟踪其成员的更改   在TrackViewState()方法之后   被调用。也就是说,如果你有一个   StateBag,任何和所有添加或   以前做过的修改   TrackViewState()不是   SaveViewState()方法时保存   被调用。 TrackViewState()   方法在结束时调用   初始化阶段,这发生了   在实例化阶段之后。   因此,初始财产   实例化中的分配   stage—同时写入ViewState   在属性'set accessors—中   期间不坚持   在SaveViewState()方法中调用   保存视图状态阶段,因为   TrackViewState()方法还没有   。调用"

其他提示

以下是另一位用户发布的关于 ASP.NET页面生命周期值得查看ViewState问题。

另外,请查看“真正了解ViewState "

正如我在后面添加的部分中所述,显然你不能在页面加载之前在视图状态中设置任何东西,即使Asp.net没有抛出错误,它将在整个初始阶段存在于视图状态页面生命周期,它不会持续在后续的后期生命周期中。

看看你在哪里设置ViewState值。可能会对OnUnload事件进行连接并检查ViewState对象,以确保实际设置值。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top