Asp.net 如何动态交换ascx控件?

Asp.net 如何动态交换ascx控件?,asp.net,updatepanel,ascx,Asp.net,Updatepanel,Ascx,我有一个aspx <div id="headerRegion" class="borderDiv"> <xy:paymentHeader id="paymentHeader1" runat="server" /> </div> <div id="paymentRegion" class="borderDiv"> <asp:UpdatePanel ID="paymentFormUpdater" runat="server">

我有一个aspx

<div id="headerRegion" class="borderDiv">
    <xy:paymentHeader id="paymentHeader1" runat="server" />
</div>
<div id="paymentRegion" class="borderDiv">
    <asp:UpdatePanel ID="paymentFormUpdater" runat="server">
        <ContentTemplate>
            <asp:PlaceHolder runat="server" ID="plcPaymentForm" />
        </ContentTemplate>
    </asp:UpdatePanel>
</div>
paymentHeader1控件上有一个单选按钮列表。当我切换该单选按钮时,我希望在占位符“plcPaymentForm”中的Periodicform.ascx和Lumpform.ascx之间优雅地切换。如何正确地执行此操作?我试图不加载这两个控件并切换它们的可见性。如果你有任何想法如何做到这一点与最小的页面中断,请告诉我在正确的方向


谢谢,~ck在圣地亚哥

你可以这样做:

protected void rbl_Changed(object sender, EventArgs e)
{
    if(rbl.SelectedItem.Text == "Periodicform")
        Page.FindControl("plcPaymentForm") = LoadControl("Periodicform.ascx");
    else if(rbl.SelectedItem.Text == "Lumpform")
        Page.FindControl("plcPaymentForm") = LoadControl("Lumpform.ascs");
}

在Init上,您需要加载当前显示的任何一个,否则viewstate将无法加载。然后,在单选按钮更改事件的事件处理程序上(假设已启用自动回发并已排序必要的AJAX触发器),按照所做的方式加载新的paymentCtl,但在添加前清除plcPaymentForm.Controls集合

如果需要,可以在UpdatePanel上调用Update()(或者是Refresh()),强制从其外部的控件刷新其内容,或者将其设置为在每次回发时刷新,具体取决于您正在执行的控件和回发操作

protected void rbl_Changed(object sender, EventArgs e)
{
    if(rbl.SelectedItem.Text == "Periodicform")
        Page.FindControl("plcPaymentForm") = LoadControl("Periodicform.ascx");
    else if(rbl.SelectedItem.Text == "Lumpform")
        Page.FindControl("plcPaymentForm") = LoadControl("Lumpform.ascs");
}