繁体   English   中英

TabContainer问题

[英]TabContainer Problems

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

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

这一切都畅通无阻。

最近,我对jQuery tab hackish的方法有些厌倦,决定移植所有内容以使用TabContainer。 我希望能够将选项卡作为对象进行控制。

乍一看,一切正常。 我只是将控件拍到TabContainer的选项卡中,一切看起来都很棒。 但是,由于某种原因,数据绑定控件将丢失其数据。

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

TabContainer->自定义控件-> 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>

确保您的TabContainer的OnDemand属性已关闭。 我知道一个事实,这可能会导致您的控件(例如GridView)在保留其行的同时丢失其数据,尤其是在动态生成控件的情况下。

通过标记:

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

通过代码:

tcBanner.OnDemand = false;

最终与嵌套的TabContainer完全无关。

在将控件添加到TabContainer之前,我在不知不觉中破坏了这些控件,令人惊讶的是,这意味着它们无法像以前那样起作用。

很抱歉浪费您的集体时间。

谢谢,克利夫

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM