15

我正在使用 .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>

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

我在一个嵌套的 Masterpage 中,但我不确定这是否是一个问题。我正在使用的这个社区服务器框架中是否有某些东西会导致所有事件回发?

4

6 回答 6

20

您是否尝试在“触发器”部分中设置Button1为?AsyncPostBackTriggerChildrenAsTriggers属性设置为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>
于 2009-04-08T00:10:09.790 回答
6

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

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

于 2009-04-08T00:08:02.747 回答
5

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

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

于 2015-10-13T11:00:02.363 回答
3

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

<xhtmlConformance mode="Legacy"/>
于 2018-10-29T16:12:46.873 回答
2

ChildrenAsTriggers="true"在您的 UpdatePanel 控件上设置。

于 2009-04-08T00:08:34.973 回答
2

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

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

于 2011-07-21T15:28:37.380 回答