簡體   English   中英

如何阻止UpdatePanel導致整頁回發?

[英]How to stop UpdatePanel from causing whole page postback?

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

每當我點擊按鈕,確保面板更新 - 但整個頁面回發! 我可以看到整個頁面閃爍。 我到底做錯了什么?

我在嵌套的母版頁內,但我不確定這是不是一個問題。 我正在使用的社區服務器框架中是否存在導致所有事件都回發的內容?

您是否嘗試在觸發器部分中將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>

我在上面的代碼示例中沒有看到Label2。 如果Label2位於UpdatePanel之外,則會發生整頁刷新,因為這是頁面正確更新Label2所需的內容。

默認情況下,UpdatePanels只會在其中的控件觸發時動態刷新其中的內容。 如果您需要進行一些更高級的更新,請說面板外部的按鈕導致刷新或更新其他面板中的標簽,那么您需要在UpdatePanel上設置Conditional屬性並進行一些手動更新調用在你的代碼中。

另一個可能的原因是,如果頁面具有ClientIDMode="static" ,那么您希望僅刷新UpdatePanel的控件將刷新整個頁面。

要解決此問題,您只需在控件上設置ClientIDMode="AutoID"觸發UpdatePanel回發。

“默認情況下,UpdatePanels只會在其中的控件觸發時動態刷新其中的內容。”

否則整個頁面都會刷新! 這才是重點!

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

如果您有一個從.net framework v1.1升級的舊項目,則從Web配置中刪除此行以使其正常工作:

<xhtmlConformance mode="Legacy"/>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM