2009-07-24 61 views
0

我有一个aspx。如何动态交换ascx控件?

<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> 

页init上,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控件上有一个radioButton列表。当我切换该单选按钮时,希望在占位符“plcPaymentForm”中的Periodicform.ascx和Lumpform.ascx之间进行优雅交换。我如何正确地做到这一点?我正在尝试不加载这两个控件并切换其可见性。如果您有任何想法如何在最小页面中断的情况下正确执行此操作,请指向正确的方向。

谢谢〜CK在圣地亚哥

回答

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

在初始化你需要哪一个正在显示加载,或视图状态将无法加载。然后,在单选按钮更改事件的事件处理程序中(假设您有自动回发功能并且必要的AJAX触发器已排序),请按照以前的方式加载新的paymentCtl,但在添加之前清除plcPaymentForm.Controls集合。

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