如何阻止UpdatePanel导致整页回发?

时间:2009-04-07 23:58:37

标签: c# asp.net .net-3.5 updatepanel community-server

我正在使用.NET 3.5并在Community Server 2008框架内构建页面。

在其中一个页面上,我试图让UpdatePanel正常工作。

我直接从ASP.NET网站上获取样本,通过单击按钮将UpdatePanel中的时间更新为当前时间,但出于某种原因,当我尝试执行该功能时,整个页面刷新

这就是我所拥有的:

protected void Button1_Click(object sender, EventArgs e)
{
    Label1.Text = "Panel refreshed at " + DateTime.Now.ToString();
    Label2.Text = "Panel refreshed at " + DateTime.Now.ToString();
}
<asp:ScriptManager ID="ScriptManager1" runat="server"/>

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <fieldset>
            <legend>UpdatePanel</legend>
            <asp:Label ID="Label1" runat="server" Text="Panel created."></asp:Label><br />
            <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
        </fieldset>
    </ContentTemplate>
</asp:UpdatePanel>

每当我点击按钮,确保面板更新 - 但整个页面都会回复!我可以看到整个页面闪烁。我到底做错了什么?

我在嵌套的母版页内,但我不确定这是否是一个问题。我正在使用的社区服务器框架中是否存在导致所有事件都要回发的内容?

6 个答案:

答案 0 :(得分:20)

您是否尝试在“触发器”部分中将Button1设置为AsyncPostBackTrigger?将ChildrenAsTriggers属性设置为true,将UpdateMode属性设置为Conditional

protected void Button1_Click(object sender, EventArgs e)
{    
    Label1.Text = "Panel refreshed at " + DateTime.Now.ToString();    
    UpdatePanel1.Update();
}    
<asp:ScriptManager ID="ScriptManager1" runat="server"/>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional">
    <Triggers>        
        <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />    
    </Triggers>    
    <ContentTemplate>        
        <fieldset>            
            <legend>UpdatePanel</legend>            
            <asp:Label ID="Label1" runat="server" Text="Panel created."></asp:Label><br />            
            <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />        
        </fieldset>    
    </ContentTemplate>
</asp:UpdatePanel>

答案 1 :(得分:6)

我在上面的代码示例中没有看到Label2。如果Label2位于UpdatePanel之外,则会发生整页刷新,因为这是页面正确更新Label2所需的内容。

默认情况下,UpdatePanels只会在其中的控件触发时动态刷新其中的内容。如果您需要进行一些更高级的更新,请说面板外部的按钮导致刷新或更新其他面板中的标签,那么您需要在UpdatePanel上设置Conditional属性并进行一些手动更新调用在你的代码中。

答案 2 :(得分:3)

另一个可能的原因是,如果页面有ClientIDMode="static",那么您希望仅刷新UpdatePanel的控件将刷新整个页面。

要解决此问题,您只需在控件上设置ClientIDMode="AutoID"即可触发UpdatePanel回发。

答案 3 :(得分:2)

在UpdatePanel控件上设置ChildrenAsTriggers="true"

答案 4 :(得分:2)

“默认情况下,UpdatePanels只会在其中的控件触发时动态刷新其中的内容。”

否则整个页面都会刷新!这就是重点!

答案 5 :(得分:0)

如果您有一个从.net framework v1.1升级的旧项目,请从您的Web配置中删除此行以使其起作用:

<xhtmlConformance mode="Legacy"/>