UpdatePanel Full Postback - PullRequest
       8

UpdatePanel Full Postback

4 голосов
/ 01 мая 2009

Привет, вот сценарий.

У меня есть и страница .aspx с такой панелью обновления

<asp:UpdatePanel id="uPanelMain" runat="server">
    <ContentTemplate>
        <uc:Calendar id="ucCalendar" runat="server" Visible="true" />
       <uc:Scoring id="ucScoring" runat="server" Visible="false" />
   </ContentTemplate>

Элемент управления ucCalendar загружается первым и содержит сетку, подобную этой

<asp:DataGrid CssClass="grid" ID="gridGames" runat="server" AutoGenerateColumns="False" HeaderStyle-CssClass="gridHeader" ItemStyle-CssClass="gridScoringRow"  
            GridLines="None" ItemStyle-BackColor="#EEEEEE" AlternatingItemStyle-BackColor="#F5F5F5"
            OnEditCommand="doScoreGame" OnDeleteCommand="doEditGame" OnCancelCommand="printLineup" OnItemDataBound="gridDataBound">
   <Columns>
        <asp:TemplateColumn >
            <ItemTemplate>
                <asp:CheckBox ID="chkDelete" runat="server" />
            </ItemTemplate>
        </asp:TemplateColumn>
        <asp:BoundColumn DataField="idGame" Visible="false" />
        <asp:BoundColumn DataField="isClose" Visible="false" />
        <asp:TemplateColumn HeaderText="Status">
            <ItemTemplate>
                <asp:Image ID="imgStatus" runat="server" ImageUrl="~/img/icoX.png" alt="icoStatus" />
            </ItemTemplate>
        </asp:TemplateColumn>
        <asp:TemplateColumn>
            <ItemTemplate>
                <asp:LinkButton ID="linkScore" runat="server" CommandName="Edit" Text="Score" />
            </ItemTemplate>
        </asp:TemplateColumn>
   </Columns>
</asp:DataGrid>

Поэтому, когда я нажимаю "linkButton", кодовая часть userControl вызывает публичный метод в .aspx следующим образом:

от пользователя Control

    protected void doScoreGame(object sender, DataGridCommandEventArgs e)
    {
        ((GM)this.Page).showScoring(null, null);
    }

со страницы .aspx

public void showScoring(object sender, EventArgs e)
{
    removeLastLoadedControl();
    ucScoring.Visible = true;
}

Итак, возникает проблема:

Когда я изменяю атрибут visible элемента управления ucScoring, происходит две обратной передачи.

Первый постбэк в порядке, он обрабатывается панелью обновления.

Второй постбэк - это полный постбэк, и я действительно не понимаю, почему это происходит.

Я действительно потерян здесь, пожалуйста, помогите!

Спасибо

Мат

Ответы [ 2 ]

1 голос
/ 08 октября 2009

Вы запускаете событие вручную, о котором UpdatePanel не знает. Вам нужно привязать это событие к вашему элементу управления и зарегистрировать его:

ScriptManager.RegisterAsyncPostBack(ucScoring);
0 голосов
/ 01 мая 2009

Мне интересно, что происходит в методе removeLastLoadedControl ().

...