【问题标题】:How do I dynamically swap ascx controls?如何动态交换 ascx 控件?
【发布时间】:2010-11-13 14:21:36
【问题描述】:

我有一个 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>

在页面初始化时,placeHolder 加载一个 ascx。

private Control GetPaymentControl(char? coverageBenefitPeriod)
{
    Control paymentCtl = null;
    switch (coverageBenefitPeriod)
    {
        case 'L':
            paymentCtl = this.LoadControl("~/Controls/Lumpform.ascx");
            break;
        case 'W':
            paymentCtl = this.LoadControl("~/Controls/Periodicform.ascx");
            break;
        default:
            paymentCtl = this.LoadControl("~/Controls/Lumpform.ascx");
            break;
    }
    return paymentCtl;
}
plcPaymentForm.Controls.Add(control);

paymentHeader1 控件上有一个单选按钮列表。当我切换该单选按钮时,我想优雅地在占位符“plcPaymentForm”中的 Periodicform.ascx 和 Lumpform.ascx 之间切换。我该如何正确地做到这一点?我试图不加载两个控件并切换它们的可见性。如果您有任何想法如何以最少的页面中断正确执行此操作,请指出正确的方向。

谢谢,~ck 在圣地亚哥

【问题讨论】:

    标签: asp.net updatepanel ascx


    【解决方案1】:

    你可以这样做:

    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");
    }
    

    【讨论】:

      【解决方案2】:

      在初始化时,您需要加载当前显示的任何一个,否则视图状态将无法加载。然后在单选按钮更改事件的事件处理程序上(假设您已启用自动回发并已对必要的 AJAX 触发器进行排序),像您所做的那样加载新的 paymentCtl,但在添加之前清除 plcPaymentForm.Controls 集合。

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

      【讨论】:

        猜你喜欢
        • 2011-01-04
        • 1970-01-01
        • 2019-08-17
        • 2011-09-22
        • 2012-07-11
        • 2012-04-30
        • 2010-11-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多