0

我正在使用 ASPxperience 控件进行测试。我有一个简单的 CallbackPanel,里面有一个文本框和一个 PageControl。只是为了测试,我在回调面板下放置了一个按钮。单击时,我想向 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 总是删除(或忘记或忽略?)之前添加的选项卡,因此您总是只剩下一个名为“测试”的额外选项卡。

这是怎么来的?我不明白 ?(我对这个控制套件相当陌生)

4

1 回答 1

2

使用ASPxCallbackPanel's 你可以访问ViewState,因为它被发送到服务器,但是ViewState在回调期间不能在服务器端更改它,所以它最后不会更新。这种行为是设计使然,因此您无能为力。

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

您可以:

  1. 在标记上设计所有选项卡(或在第一次加载时),并使用ASPxPageControl 客户端 APIASPxTabPage 客户端 API使它们可见/不可见。

  2. 使用UpdatePanel,它允许您访问和更改ViewState.

于 2012-05-16T21:15:16.833 回答