C# TabContainer问题

C# TabContainer问题,c#,asp.net,user-controls,tabcontainer,C#,Asp.net,User Controls,Tabcontainer,AJAX工具包中的TabContainer有一个奇怪的问题 我们在客户记录系统中有几个视图,这些视图是作为ASP.net控件构建的。这些控件使用UpdatePanel异步加载数据。我们使用jQuery和jQuery.ui将这些控件放置在单个页面上的单独选项卡中 这一切都很顺利 最近,我有点厌倦了jQueryTab的黑客方法,决定移植所有东西来使用TabContainer。我希望能够控制选项卡作为对象 乍一看,一切都很完美。我只是在一个TabContainer中将控件插入选项卡,一切看起来都很棒。

AJAX工具包中的TabContainer有一个奇怪的问题

我们在客户记录系统中有几个视图,这些视图是作为ASP.net控件构建的。这些控件使用UpdatePanel异步加载数据。我们使用jQuery和jQuery.ui将这些控件放置在单个页面上的单独选项卡中

这一切都很顺利

最近,我有点厌倦了jQueryTab的黑客方法,决定移植所有东西来使用TabContainer。我希望能够控制选项卡作为对象

乍一看,一切都很完美。我只是在一个TabContainer中将控件插入选项卡,一切看起来都很棒。但是,由于某些原因,数据绑定控件正在丢失其数据

例如,当我切换页面时,网格视图消失。具有ContextChanged事件的下拉控件在回发时会丢失其值的数据绑定列表

TabContainer->Custom Control->UpdatePanel->控件中使用数据绑定继承机制的一些东西正在使它失去控制,调试器也没有发出任何信号。似乎没有存储控件状态

我对控制状态的了解还不够,不知道该查找什么

有什么想法吗?以下是TabContainer的标记:

<asp:TabContainer ID="tcBanner" runat="server" ActiveTabIndex="0" Width="100%" 
    EnableViewState="False" ScrollBars="Vertical">
    <asp:TabPanel runat="server" HeaderText="Comments" ID="tbComments">
        <ContentTemplate>
            <luBannerControl:Comments ID="commentsTabContent" runat="server" />
        </ContentTemplate>
    </asp:TabPanel>        
    <asp:TabPanel runat="server" HeaderText="General" ID="tbContact">
        <ContentTemplate>
            <luBannerControl:Contact ID="contactTabContent" runat="server" />
        </ContentTemplate>
    </asp:TabPanel>
</asp:TabContainer>

以下是其中一个控件的标记:

<asp:UpdatePanel ID="pnlComments" UpdateMode="Conditional" runat="server">
    <ContentTemplate>
        <asp:GridView ID="CommentsGridView" AllowPaging="true" PageSize="20" DataSourceID="BannerSqlDataSource" runat="server" AutoGenerateColumns="False" GridLines="None" CssClass="CommentGrid" HeaderStyle-CssClass="CommentGridHeader" RowStyle-CssClass="CommentRowsEven" AlternatingRowStyle-CssClass="CommentRowsOdd">
            <Columns>
                <asp:BoundField DataField="SPRCMNT_TEXT" HeaderText="Comment" SortExpression="SPRCMNT_TEXT" />
                <asp:BoundField DataField="SPRCMNT_DATE" HeaderText="Created" SortExpression="SPRCMNT_DATE" DataFormatString="{0:M/dd/yyyy}" />
                <asp:BoundField DataField="SPRCMNT_CMTT_CODE" HeaderText="Type" SortExpression="SPRCMNT_CMTT_CODE" />
                <asp:BoundField DataField="SPRCMNT_CTYP_CODE" HeaderText="Source" SortExpression="SPRCMNT_CTYP_CODE" />
                <asp:BoundField DataField="sprcmnt_user_id" HeaderText="User" SortExpression="sprcmnt_user_id" />
            </Columns>
        </asp:GridView>
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="txtSearch" EventName="TextChanged" />
        <asp:AsyncPostBackTrigger ControlID="btnClearFilter" EventName="Click" />
    </Triggers>
</asp:UpdatePanel>

这与嵌套的tab容器完全无关

在将这些控件添加到TabContainer之前,我在不知情的情况下破坏了它们,令人惊讶的是,这意味着它们不再像以前那样工作

很抱歉浪费了你们的集体时间

谢谢,
Clif

确保您的TabContainer的
OnDemand
属性已关闭。我知道这会导致GridView等控件在保留行的同时丢失数据,特别是在动态生成控件的情况下

通过标记:

<asp:TabContainer ID="tcBanner" runat="server" ActiveTabIndex="0" Width="100%" 
    EnableViewState="False" ScrollBars="Vertical" OnDemand="false" >
tcBanner.OnDemand = false;

我遇到了一个类似的问题,在formview中使用tab容器完全消除了数据绑定持久性。不幸的是,我没有给你的链接,但我可以告诉你答案是手动捕获onitemdatabound事件,基本上是通过修改viewstate使其工作。就我个人而言,我对AjaxControlToolkit控件非常谨慎。它们充其量也很脆弱。我只是想起来了一点。您必须手动钩住iteminserting事件,等等,并使用
e.OldValues[“ID”]=OldConsultationPackValues.ID之类的东西来破解这些值。嗯。但我离题了。我知道这不是完全一样的问题。那不好玩。我希望这是我的疏忽,而不是整个控制的问题。其他人有想法吗?或者我应该放弃这次尝试吗?