У меня есть 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(контроль);
Там есть список RadioButton для элемента управления paymentHeader1. Когда я переключаю этот переключатель, вы хотите элегантно обмениваться между Periodicform.ascx и Lumpform.ascx в заполнителе "plcPaymentForm". Как это сделать правильно? Я пытаюсь не загружать оба элемента управления и переключать их видимость. Если у вас есть идеи, как правильно это сделать с минимальным перерывом страницы, пожалуйста, укажите мне в правильном направлении.
Спасибо, ~ ck в Сан-Диего
Небольшая версия того, что ответил drs9222.
1. Объявите делегата
Public delegate void UserControlFormSubmit(object sender, EventArgs e);
2. Объявить событие внутри пользовательского элемента управления UserControlFormSubmit
Public event UserControlFormSubmit OnFormSubmit;
3. Задайте событие управления пользователями как триггер для панели обновления, например
<asp:UpdatePanel ID="paymentFormUpdater" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true">
<ContentTemplate>
<asp:PlaceHolder runat="server" ID="plcPaymentForm" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="paymentHeader1" EventName="OnFormSubmit" />
4. Поднимите событие OnFormSubmit, когда выбрано событие eventexchange для radioButtonList. (Обратите внимание, что вам необходимо установить AutoPostBack = true для radioButtonList, как указано drs9222.
Я вижу три быстрых и грязных идеи:
protected void RadioButtonList1_SelectedIndexChanged(object sender, EventArgs e)
{
string value = ((RadioButtonList)sender).SelectedValue;
char? c = null;
if (!string.IsNullOrEmpty(value))
{
c = value[0];
}
RaiseBubbleEvent(this, new CommandEventArgs("SelectedIndexChanged", c));
}
protected override bool OnBubbleEvent(object source, EventArgs args)
{
if (args is CommandEventArgs)
{
CommandEventArgs cArgs = (CommandEventArgs)args;
if (cArgs.CommandName == "SelectedIndexChanged")
{
Control c = GetPaymentControl((char?)cArgs.CommandArgument);
// ...
updatePanel.Update();
return true;
}
}
return base.OnBubbleEvent(source, args);
}