简体   繁体   中英

Partial update doesn't work with master pages

I am working on a C# asp.net web forms project. It has two master pages. I have an user control which reads data from database, creates an un-ordered list in html string and populates a placeholder with it. This user control has to be automatically refreshed every 2 minutes. I have included this usercontrol on the parent master page. I have the following code to refresh the user control, which I have obtained through another stackoverflow answer. The problem is that the entire master page refreshes, and I am not sure why.

Is there a way to make that only the user control which has the UpdatePanel refreshes?

Outer Master Page:

  <body>
  <form id="frmMain" role="form" method="post" runat="server">
    <div>
       <uc2:PendingOrders runat="server" ID="PendingOrders" />
    </div>
    <asp:ContentPlaceHolder ID="MainBodyContent" runat="server">
    </asp:ContentPlaceHolder>
    </form>
 </body>

User Control:

 <asp:ScriptManager ID="myScriptManager" runat="server" 
 EnablePartialRendering="True"></asp:ScriptManager> 
 <asp:UpdatePanel ID="UpdatePanel1" UpdateMode = "Conditional" 
  runat="server">
 <ContentTemplate>

    <asp:Timer ID="Timer1" runat="server" Interval="20000" 
  OnTick="Timer1_Tick"></asp:Timer>

    <asp:PlaceHolder runat="server" id="lblMyOrders"></asp:PlaceHolder>

  </ContentTemplate>
   <Triggers>
    <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
    </Triggers>
   </asp:UpdatePanel>

User Control Code behind:

   protected void Timer1_Tick(object sender, EventArgs e)
   {
      //This method creates the html string with data as an unordered list 
      and
      //populates asp:PlaceHolder inte updatepanel
      GetData();
    }

UpdatePanel1's Content will be update by Timer1_Tick.
"entire master page refreshes" means master page's Page_Load will be call while Timer1 been trigger?
UpdatePanel always post entire page back server and only render UpdatePanel1's Content.

I had the same problem, but in our project the EnablePartialRendering was set to false on the Master Page, if set to true the whole project breaks. To fix the problem, I defined another master page without ScriptManager and added the ScriptManager to the page in which I wanted to use UpdatePanels with the EnablePartialRendering attribute set to True. This fixed the problem.

<asp:ScriptManager ID="myScriptManager" runat="server" EnablePartialRendering="True"></asp:ScriptManager> 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM