2009-07-24 15 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> 

on 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

あなたのような何かを行うことができます:あなたが現在示されている、またはビューステートの読み込みに失敗する方1ロードする必要がinitの

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())を呼び出して、そのコントロールのコンテンツを強制的に更新したり、ポストバックごとに更新するように設定することができますコントロールとあなたがやっているポストバック。

関連する問題