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コントロールにradioButtonリストがあります。そのラジオボタンを切り替えると、プレースホルダー「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

Initでは、現在表示されている方をロードする必要があります。そうしないと、viewstateのロードに失敗します。次に、ラジオボタン変更イ​​ベントのイベントハンドラーで(自動ポストバックがオンになっていて、必要なAJAXトリガーがソートされていると仮定して)、新しいpaymentCtlをロードしますが、plcPaymentForm.Controlsコレクションをクリアしてから追加します。

必要に応じて、UpdatePanelでUpdate()(またはRefresh())を呼び出して、外部のコントロールからコンテンツを強制的に更新するか、どのコントロールと何に応じて、ポストバックごとに更新するように設定することができます。あなたがしているポストバック。

于 2009-07-24T00:43:16.830 に答える