嵌套的Usercontrols和ViewState

时间:2009-02-06 16:11:23

标签: asp.net

我有一个动态加载UserControlChild的UserControlParent。

在UserControlChild中,我通过执行

使用ViewState对象存储值
ViewState["count"] = myCount;

在Postbacks上,ViewState返回null。这是因为UserControlChild是动态加载的吗?如果有帮助,UserControlParent也会在ASPX页面中动态加载。

4 个答案:

答案 0 :(得分:0)

您是否尝试在UserControl中创建调试?

protected override void LoadViewState(object savedState)
{
    base.LoadViewState(savedState);
}

答案 1 :(得分:0)

是否为您的申请启用了ViewState?有几个地方可以关闭它,即在web.config,页面本身,UserControlParentUserControlChild

答案 2 :(得分:0)

有几个可能的原因。

首先,确保在其父层次结构中指定UserControlParent,UserControlChild和每个runat =“server”控件的ID。如果您错过了一个,ASP.NET将自动分配一个。在回发之前和之后,此ID可以(在某些情况下)不同,从而破坏ViewState。

其次,确保父层次结构中每个控件的EnableViewState =“true”,直到页面的方式。如果它们中的任何一个是假的,它也会关闭所有孩子的ViewState。

第三,当您动态创建UserControlChild时,请确保在页面生命周期中尽早创建它(并将其添加到UserControlParent.Controls)。如果在页面加载ViewState后执行此操作,则只能从ViewState返回空值。在Page.Init中添加它是足够早的;在Page.Load为时已晚。

希望这有帮助!

答案 3 :(得分:0)

teedyay,

我指定了所有ID(GridView行除外),并且在任何地方都启用了视图状态,并且在标记中静态添加了控件。我仍然没有在帖子后面保存ViewState - 认为这是asp.net中的一个错误。

这是控件树:

主;页面 - Ajax:TabContainer - Ajax:TabPanel - UC1 - UC2 - Gridview - 它的行

看起来嵌套的用户控件不会保持视图状态。我在一个不同的项目上遇到了同样的问题,唯一的解决办法就是避免嵌套用户控件。

如果有人知道这种行为背后的原因,请告知。

感谢。