我有一个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>
在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 List。当我切换那个单选按钮想在占位符“plcPaymentForm”中优雅地在Periodicform.ascx和Lumpform.ascx之间交换。我该怎么做呢?我试图不加载两个控件并切换其可见性。如果你有任何想法如何正确地做到这一点,最小的页面中断,请指出我正确的方向。
谢谢,〜来自圣地亚哥
答案 0 :(得分: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");
}
答案 1 :(得分:0)
在Init上,您需要加载当前显示的那个,否则viewstate将无法加载。然后在单选按钮更改事件的事件处理程序上(假设您已启用自动回发并对必要的AJAX触发器进行排序),按照您的方式加载新的paymentCtl,但在添加之前清除plcPaymentForm.Controls集合。< / p>
如果需要,可以在UpdatePanel上调用Update()(或者是Refresh())来强制从其外部的控件刷新其内容,或者在每次回发时将其设置为刷新,具体取决于控制和你正在做的回发。