我正在使用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”的额外选项卡。
这是怎么来的?我不明白? (我对这个控制套件很新)
答案 0 :(得分:2)
使用ASPxCallbackPanel
,您可以访问ViewState
,因为它已发送到服务器,但在回调期间无法在服务器端更改ViewState
,因此它最后没有更新。这种行为是设计使你无法做很多事情。
在您的特定情况下,唯一已知的状态是在第一页加载时加载的状态,因此,在回调时,唯一已知的TabPage是标记处的那个。
你可以:
设计标记上的所有标签(或首次加载标签)并使用ASPxPageControl client-side API和ASPxTabPage client-side API使其可见/不可见。
使用UpdatePanel可以访问和更改ViewState
。