0

ASPxperience コントロールでテストしています。テキストボックスと PageControl の中に単純な Cal​​lbackPanel があります。テスト用に、コールバック パネルの下にボタンを配置しました。クリックすると、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 つだけ残ります。

これはどのように来るのですか?理解できない ?(私はこのコントロールスイートにかなり慣れていません)

4

1 に答える 1

2

With an ASPxCallbackPanel's you can access ViewState, because it is sent to the server, but that same ViewState can't be changed server-side during a callback, so it isn't updated at the end. This behavior is by design so you can't do much about it.

In your particular case the only state known is the one loaded at the first page load so, on callbacks, the only known TabPage is the one at markup.

You can either:

  1. Design all your tabs on markup (or on first load for that matter) and make them visible/invisible using ASPxPageControl client-side API and ASPxTabPage client-side API.

  2. Use UpdatePanel which allows you to access and change ViewState.

于 2012-05-16T21:15:16.833 に答える