UpdatePanel обернута вокруг пользовательского элемента управления - PullRequest
4 голосов
/ 28 января 2010

У меня есть пользовательский элемент управления, который содержит несколько кнопок и заполнитель. Эти кнопки вызывают добавление / удаление элементов управления из заполнителя. Все отлично работает.

Теперь я хочу поместить этот пользовательский элемент управления на страницу и обернуть его в панель обновления следующим образом:

            <asp:UpdatePanel ChildrenAsTriggers="true" ID="UpdatePanelFoo" runat="server" UpdateMode="Conditional">
                <ContentTemplate>
                    <grid:tablegrid ID="tablegrid_chapters" runat="server" SomeProperty="bar" />
                </ContentTemplate>
            </asp:UpdatePanel>

Когда я запускаю страницу, она все еще выполняет полный постбэк, когда я нажимаю одну из кнопок внутри пользовательского элемента управления. Что я делаю не так и как я могу это исправить?

Обновление:

protected void Page_Init()
{
    ScriptManager scr = ScriptManager.GetCurrent(this.Page);
    Response.Write("EnablePartialRendering: " + scr.EnablePartialRendering);
}

Выводит «EnablePartialRendering: true»

Ответы [ 2 ]

4 голосов
/ 28 января 2010

Убедитесь, что на вашем ScriptManager на странице EnablePartialRendering=true.

Обновление

Похоже, в вашем UserControl нет событий для поиска ... у вас есть 2 варианта здесь. Переместите UpdatePanel внутри UserControl .ascx, чтобы он мог видеть события кнопки как дочерние элементы, чтобы подключить или добавить событие для его просмотра, чтобы сделать это, например, следующим образом:

    public event EventHandler Click;

    void btn_del_Click(object sender, EventArgs e)
    {
        if (NumberOfRowControls > 0)
        {
            var rowToWhack = panel_rows.Controls.Children().Single(x => x.ID == "myrow" + (NumberOfRowControls - 1));
            panel_rows.Controls.Remove(rowToWhack);
            NumberOfRowControls--;
        }
        if(Click != null) Click(this, e);
    }

    void btn_add_Click(object sender, EventArgs e)
    {
        var row = NewRow(NumberOfRowControls);
        panel_rows.Controls.Add(row);
        if(Click != null) Click(this, e);
    }

И обновите UpdatePanel, чтобы искать его:

<asp:UpdatePanel ID="UpdatePanelFoo" runat="server" UpdateMode="Conditional">
  <ContentTemplate>
     <grid:tablegrid ID="tablegrid_chapters" runat="server" SomeProperty="bar" />
  </ContentTemplate>
  <Triggers>
    <asp:AsyncPostBackTrigger ControlID="tablegrid_chapters" EventName="Click">
  </Triggers>
</asp:UpdatePanel>
0 голосов
/ 28 января 2010

Убедитесь, что вы также добавили ScriptManager на страницу, в противном случае функция UpdatePanel отсутствует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...