UpdatePanel完整回发

时间:2009-05-01 13:54:40

标签: asp.net ajax updatepanel postback

问候,这是情景。

我和.aspx页面一起使用和updatepanel一样

<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>

所以当我点击“linkBut​​ton”时,userControl的代码隐藏会调用.aspx中的公共方法,如下所示:

来自userControl

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

所以,问题来了:

当我更改ucScoring控件的visible属性时,发生了两次回发。

第一个回发很好,它由updatePanel处理。

第二个回发是一个完整的回发,我真的不明白为什么会这样。

我真的迷失在这里,请帮助!

由于

Mat

2 个答案:

答案 0 :(得分:1)

您正在手动触发UpdatePanel不知道的事件。您需要将该事件与您的控件联系起来并进行注册:

ScriptManager.RegisterAsyncPostBack(ucScoring);

答案 1 :(得分:0)

我很想知道removeLastLoadedControl()方法中发生了什么。