2009-07-24 5 views
0

J'ai un aspx.Comment permuter dynamiquement les contrôles 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> 

à la page init, le placeHolder charge un 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); 

Il existe une liste radioButton sur le contrôle paymentHeader1. Lorsque je bascule ce bouton radio voudrais échanger élégamment entre Periodicform.ascx et Lumpform.ascx dans l'espace réservé "plcPaymentForm". Comment est-ce que je fais cela correctement? J'essaie de ne pas charger les deux contrôles et de basculer leur visibilité. Si vous avez des idées pour le faire correctement avec une interruption minimale de la page, veuillez me diriger dans la bonne direction.

Merci, ~ ck à San Diego

Répondre

0

Vous pourriez faire quelque chose comme:

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

Sur Init vous devez charger selon l'une est actuellement affiché, ou viewstate ne chargeait pas. Ensuite, sur le gestionnaire d'événements pour l'événement modifié du bouton radio (en supposant que vous avez activé la publication automatique et les triggers AJAX nécessaires), chargez le nouveau paymentCtl comme vous l'avez fait, mais effacez la collection plcPaymentForm.Controls avant de l'ajouter.

Si vous avez besoin de vous pouvez appeler Update() (ou est-il Refresh()) sur le UpdatePanel pour forcer une actualisation de son contenu des contrôles en dehors de lui, ou le définir pour actualiser à chaque publication, selon ce contrôles et quelles publications vous faites.

Questions connexes