Может ли событие userControl вызвать обновление панели обновления?

2

У меня есть 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 в Сан-Диего

  • 0
    Бюлер, Бюлер ??? Кто-нибудь?
Теги:
user-controls
asp.net-ajax
updatepanel

2 ответа

3
Лучший ответ

Небольшая версия того, что ответил 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.

  • 0
    да, сэр Винай. Это именно то, что я в итоге сделал. Спасибо за продолжение!
  • 0
    Мне пришлось изменить шаг 2 следующим образом, чтобы заставить его работать. Public event EventHandler OnFormSubmit;
1

Я вижу три быстрых и грязных идеи:

  • Возможно, вы, возможно, установили список радиокнопки автоповтором, а затем пузырьковым событием, чтобы xy: paymentHeader можно было использовать как триггер для панели обновления.
  • Имейте xy: paymentHeader поднимите событие и вызовите метод Updatepanel Update в обработчике событий.
  • Передайте идентификатор обновленной панели в элемент управления и используйте элемент управления find, чтобы найти обновленную панель и вызвать ее метод обновления.

Пример (для # 1):


UserControl:

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));
}

Page:

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);
}
  • 0
    Кроме того, даже если вы успешно выполните обновление, вы можете столкнуться с проблемами ViewState, потому что изменилось дерево управления.
  • 0
    Благодаря drs9222 это было жизнеспособное решение. Мне нравится воздействие OnBubbleEvent. Я еще не играл с этим. Спасибо! ~ ск

Ещё вопросы

Сообщество Overcoder
Наверх
Меню