0

我有一个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 在圣地亚哥

4

2 回答 2

0

您可以执行以下操作:

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");
}
于 2009-07-24T00:40:34.583 回答
0

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

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

于 2009-07-24T00:43:16.830 回答