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

use*_*885 14 c# asp.net community-server updatepanel .net-3.5

我正在使用.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();
}
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)

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

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

Mic*_*ern 20

您是否尝试在触发器部分设置Button1AsyncPostBackTrigger?将ChildrenAsTriggers属性设置为true,将UpdateMode属性设置为Conditional.

protected void Button1_Click(object sender, EventArgs e)
{    
    Label1.Text = "Panel refreshed at " + DateTime.Now.ToString();    
    UpdatePanel1.Update();
}    
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)


Dil*_*e-O 6

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

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


Mik*_*ton 5

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

要解决此问题,您只需要设置ClientIDMode="AutoID"应该触发 UpdatePanel 回发的控件。