Управление Postbacktrigger в контроле asyncpostbacktrigger? - PullRequest
0 голосов
/ 06 марта 2012

Привет, ребята, у нас есть следующая структура на одной из страниц нашего проекта:

  <asp:UpdatePanel ID="up1" runat="server">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="tabContainer" EventName="ActiveTabChanged"  />
      </Triggers>

    <ContentTemplate>


        <cc1:TabContainer ID="tabContainer" runat="server" Visible="false" ActiveTabIndex="0" AutoPostBack="true" OnActiveTabChanged="BtnTrigger_Click">
            <cc1:TabPanel ID="tab1" runat="server" HeaderText="tab1">
                <ContentTemplate>
                    <uc:userControlFirst ID="uc1" runat="server"  />
                    <uc:userControlSecond ID="uc2" runat="server"/>                                                  
                </ContentTemplate>
            </cc1:TabPanel>....
       </ContentTemplate>
       </asp:UpdatePanel>

Мы хотим обновлять панель обновления каждый раз, когда пользователь меняет вкладку. Проблема в том, что в элементе управления uc2 у нас есть сетка с кнопками ссылок для загрузки отчета (.xlsx), и поскольку uc2 находится внутри элемента управления, который является триггером asyncpostback, каждый раз, когда мы нажимаем на кнопку ссылки, обновления панели обновлений вместо всей страницы, поэтому мы не можем для загрузки отчетов.

Ранее, когда tabContainer не был asyncpostbactrigger, мы могли зарегистрировать gridview в качестве элемента управления обратной передачей:

ScriptManager.GetCurrent(Page).RegisterPostBackControl(this.gvInsertionHistory);

но, к сожалению, он перестал работать.

Есть ли способ зарегистрировать эти кнопки ссылок или даже весь gridview или uc2 в качестве элемента управления обратной передачей, даже если они находятся внутри asyncpostbackcontrol?

А в чем причина использования атрибута EventName? Он установлен для ActiveTabChanged, но панель обновления обновляется каждый раз, когда мы щелкаем что-то внутри tabContainer.

Я пытался также добавить uc2 в качестве PostbackTrigger в разметке, но похоже, что это невозможно / запрещено. Установка childrenAsTrigger в false тоже не помогла.

Буду благодарен за любые идеи.

1 Ответ

0 голосов
/ 07 марта 2012

Прежде чем углубляться в это, попробуйте подход, основанный на Querystring , переписав кнопки загрузки в ссылки с Queryparamters, а не кнопками обратной передачи, чтобы экспортировать xlsx. Это всегда приведет к полной загрузке страницы (при условии, что вы не используете фреймы). Создайте что-то вроде этого:

<a href="?ID=1&Format=xlsx">download</a>

и в проверке Page_Load

if (Request.Querystring["Format"] == "xlsx")
{
  //Response.Write(...render xlsx method)
}

Редактировать: Вы можете даже target="_blank" ссылку, чтобы сохранить текущий просмотр страницы в том виде, как она есть

...