DevExpress aspxCallbackPanel的行为和控制状态

时间:2012-05-16 16:34:03

标签: c# asp.net ajax devexpress

我正在使用ASPxperience控件进行测试。我有一个简单的CallbackPanel,里面有一个文本框和一个PageControl。 只是为了测试,我在callbackpanel下面放了一个按钮。点击后,我想为PageControl添加一个额外的标签。

标记:

<dx:ASPxCallbackPanel ID="ASPxCallbackPanel1" runat="server" Width="200px" OnCallback="ASPxCallbackPanel1_Callback1">
    <PanelCollection>
        <dx:PanelContent runat="server">
            <dx:ASPxPageControl ID="ASPxPageControl1" runat="server" ActiveTabIndex="0" ClientInstanceName="PageControl1"
                Height="359px" Width="538px">
                <TabPages>
                    <dx:TabPage>
                        <ContentCollection>
                            <dx:ContentControl runat="server">
                            </dx:ContentControl>
                        </ContentCollection>
                    </dx:TabPage>
                </TabPages>
            </dx:ASPxPageControl>
            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        </dx:PanelContent>
    </PanelCollection>
</dx:ASPxCallbackPanel>

 <input id="Button1" type="button" value="button" onclick="ASPxCallbackPanel1.PerformCallback('addtab');" />

代码隐藏

    protected void ASPxCallbackPanel1_Callback1(object sender, DevExpress.Web.ASPxClasses.CallbackEventArgsBase e)
    {
        ASPxPageControl1.TabPages.Add("Test");
        TextBox1.Text += "1";
    }

现在奇怪的是,每次单击按钮时,文本框中的文本框内容都会添加“1”。因此,如果您单击5次,它将显示:'11111'。 但是,PageControl总是删除(或忘记或忽略?)之前添加的选项卡,因此您总是只留下一个名为“test”的额外选项卡。

这是怎么来的?我不明白? (我对这个控制套件很新)

1 个答案:

答案 0 :(得分:2)

使用ASPxCallbackPanel,您可以访问ViewState,因为它已发送到服务器,但在回调期间无法在服务器端更改ViewState,因此它最后没有更新。这种行为是设计使你无法做很多事情。

在您的特定情况下,唯一已知的状态是在第一页加载时加载的状态,因此,在回调时,唯一已知的TabPage是标记处的那个。

你可以:

  1. 设计标记上的所有标签(或首次加载标签)并使用ASPxPageControl client-side APIASPxTabPage client-side API使其可见/不可见。

  2. 使用UpdatePanel可以访问和更改ViewState