2011-04-13 51 views
1

后,我在这个格式标记: -加载不同的控件在有条件的UpdatePanel回发

<asp:UpdatePanel runat="server" id="UpdatePanelList" UpdateMode="conditional"> 
    <ContentTemplate> 
     <asp:ListView></asp:ListView> 
    </ContentTemplate> 
</asp:UpdatePanel> 

<asp:UpdatePanel runat="server" ID="UpdatePanelMain" UpdateMode="Conditional"> 
    <ContentTemplate /> 
</asp:UpdatePanel> 

在这个更新面板,如果从数据库中的记录,可以发现一个DataGrid控件(标签和下拉控件)应该显示。如果不是HtmlGenericControl DIV控件应显示相关消息,要求用户创建记录。这两个控件都是动态创建的,使用“输出”功能(如“ToString”)自定义类来填充这些控件。

如果我测试了几个连续的DataGrid控件填充UpdatePanel的操作,这可以正常工作。同样,HtmlGenericControl DIV也按照预期的方式填充多个连续。

然而,当我测试的其他控制类型来填充的UpdatePanel,这个工程上的第一个实例,但是任何附加回发来填充UpdatePanel的失败,一个对话框提示:

Failed to load viewstate. The control tree into which viewstate is being 
loaded must match the control tree that was used to save viewstate during 
the previous request. For example, when adding controls dynamically, the 
controls added during a post-back must match the type and position of the 
controls added during the initial request. 

我被领相信UpdatePanel控件在这个实例中控制了动态控件的视图状态。

如何恢复视图状态以允许在同一个UpdatePanel中显示多种类型的控件 ?

谢谢。

回答

0

恢复所有动态控制(保存信息,这样做,或任何确定适当的ViewState中)在相同的等级秩序作为最后一个页面中的“初始化”或“装载”生成生命周期事件。对于ASP.NET WebForms中的正常和异步回发,这是相同的要求。

的控件必须添加 - 要匹配的控制层次 - 然后“装载”事件之后被去除。

参考:

  1. DynamicControlsPlaceholder,这是一种预制的控制,以帮助这一点。它还讨论了它是如何工作的。
  2. Dynamic Loading of ASP NET User Controls
相关问题