我有一个动态加载UserControlChild的UserControlParent。
在UserControlChild中,我通过执行
使用ViewState对象存储值ViewState["count"] = myCount;
在Postbacks上,ViewState返回null。这是因为UserControlChild是动态加载的吗?如果有帮助,UserControlParent也会在ASPX页面中动态加载。
答案 0 :(得分:0)
您是否尝试在UserControl中创建调试?
protected override void LoadViewState(object savedState)
{
base.LoadViewState(savedState);
}
答案 1 :(得分:0)
是否为您的申请启用了ViewState
?有几个地方可以关闭它,即在web.config,页面本身,UserControlParent
或UserControlChild
。
答案 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 - 它的行
看起来嵌套的用户控件不会保持视图状态。我在一个不同的项目上遇到了同样的问题,唯一的解决办法就是避免嵌套用户控件。
如果有人知道这种行为背后的原因,请告知。
感谢。