+1-888-365-2779
Try Now
More in this section

Forums / Developing with Sitefinity / UpdatePanel Only Works on Initial Partial Postback

UpdatePanel Only Works on Initial Partial Postback

4 posts, 0 answered
  1. Dan
    Dan avatar
    3 posts
    Registered:
    27 Aug 2013
    12 Jun 2014
    Link to this post

    Hello,

    I have a Master Page that has various placeholders that loads user controls for different content.  A header would be one and the main page content another.  Within the main content user control, it loads various other user controls based on what page is needing displayed.  

    Master Page

    <%@ Master Language="C#" AutoEventWireup="true" EnableViewState="true" CodeBehind="Admin.Master.cs" Inherits="SitefinityWebApp.Admin" %>
    <%@ Import Namespace="SitefinityWebApp.Model.Session" %>
     
    <!DOCTYPE html>
    <head id="Head1" runat="server">
    </head>
    <body>
        <form id="form1" runat="server">
     
            <!-- start of header -->
            <section id="header">
                <asp:ContentPlaceHolder ID="cph_header" runat="server" />
            </section>
     
            <!-- Site  Content -->
            <section id="contentWrapper">
                <asp:ContentPlaceHolder ID="cph_content" runat="server" />
            </section>
        </form>
    </body>
    </html>

    The following page gets loaded into content

    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="CorpPendingApproval.ascx.cs" Inherits="SitefinityWebApp.userctrls.Admin.Dashboard.Corporate.CorpPendingApproval" %>
     
    <asp:UpdatePanel ID="PendingApprovalList" UpdateMode="Always" runat="server">
        <ContentTemplate>
            <asp:HiddenField ID="hf_currentPage" runat="server" value="0" />
            <asp:HiddenField ID="hf_totalResults" runat="server" value="0" />
     
            <h2>Pending Approvals</h2>
            <div class="corporateAdminPagination">
                <a ID="topPageBack" class="leftArrow" runat="server" onserverclick="PageBack"></a>
                <asp:Label ID="topCurrentPageInfo" Text="" runat="server" />
                <a ID="topPageForward" class="rightArrow" runat="server" onserverclick="PageForward"></a>
            </div>
     
            <!-- Table Start -->
            <table class="corporateAdminPendingApprovals" cellspacing="0">
     
                <!-- Table Heading -->
     
                <!-- Example Binding Setup -->
                <asp:Repeater ID="LowPriority" runat="server">
                    <ItemTemplate>
                        <tr class="pendingApprovalListItem"
                            <!-- Repeater Bindings Here -->
                        </tr>
                    </ItemTemplate>
                </asp:Repeater>
         
                <!-- Table Footer -->
                <tr class="pendingApprovalsFooter">
     
                    <!-- Footer Pagination -->
                    <td width="221" class="corporateAdminPagination">
                        <a ID="bottomPageBack" class="leftArrow" runat="server" onserverclick="PageBack"></a>
                        <asp:Label ID="bottomCurrentPageInfo" Text="" runat="server" />
                        <a ID="bottomPageForward" class="rightArrow" runat="server" onserverclick="PageForward"></a>
                    </td>              
                </tr>
            </table>
            <!-- Table End -->       
        </ContentTemplate>
    </asp:UpdatePanel>

    Code behind for the above user control

    namespace SitefinityWebApp.userctrls.Admin.Dashboard.Corporate {
        public partial class CorpPendingApproval : System.Web.UI.UserControl {
     
            public int CurrentPage {
                get {
                    return int.Parse(hf_currentPage.Value);
                }
                set {
                    hf_currentPage.Value = value.ToString();
                }
            }
            public int TotalResults {
                get {
                    return int.Parse(hf_totalResults.Value);
                }
                set {
                    hf_totalResults.Value = value.ToString();
                }
            }
     
            //Sets default page values for pagination results
            protected void Page_Load(object sender, EventArgs e) {
                if (!IsPostBack) {
                    CurrentPage = 0;
                    TotalResults = GetResultSetCount();
                    PopulatePageInfoTexts();
                    PopulatePageWithResultSet();
                }
            }
     
            //Returns the count of the entire result set
            private int GetResultSetCount() {
                //Returns List<T>
                //Omitted for brevity
            }
     
            //Moves the pagination back one page
            protected void PageBack(object sender, EventArgs e) {
                if (CurrentPage > 0) {
                    CurrentPage--;
                    PopulatePageInfoTexts();
                    PopulatePageWithResultSet();
                }
            }
     
            //Moves the pagination forward one page
            protected void PageForward(object sender, EventArgs e) {
                if (CurrentPage < (int)(TotalResults / ((CurrentPage + 1) * 20))) {
                    CurrentPage++;
                    PopulatePageInfoTexts();
                    PopulatePageWithResultSet();
                }
            }
     
            //Displays info about number of results/pages for pagination
            private void PopulatePageInfoTexts() {
                //Logic omitted for brevity
            }
     
            //Displays result set based on current viewing page
            private void PopulatePageWithResultSet() {
                //Logic omited for brevity
     
                //Bind to repeaters
                TopPriority.DataSource = topPriority;
                TopPriority.DataBind();
            }
        }
    }

    Basically, when a pageForward or pageBack button is clicked, it changes the value in the hidden fields, and request data from DB with a new offset, and binds that data to the Repeater in the UpdatePanel.  I expect it call the server, increment the current page, and display the new results.  This only works the first time any button is clicked.  After that, the HTML is returned correctly when looking at the network calls and responses in Chrome's DevTools, but the HTML never gets re-rendered on the page after the first post back...?

    There is an error that is thrown when this starts happening, and it is from jquery.cookie.js.  The include for this file is no where to be found in the entire project, so I am guessing SiteFinity includes it somewhere in one of the bundled DLLs.  I don't know if this is the root cause of the problem, but I expect it has something to do with it.  The following is the error that shows up in DevTools

    Uncaught TypeError: undefined is not a function: Telerik.Web.UI.WebResource.axd?_TSM_HiddenField_=ctl09_TSM&compress=0&_TSM_CombinedScripts_=%3b%3bT…:559
    _checkBrowseAndEditState:function(){browseAndEditState=jQuery.cookie(this._browseAndEditCookieName);

    How exactly is one supposed to use an UpdatePanel within Sitefinity with Partial PostBacks?  This example works fine in a local environment...?

  2. Boyko Karadzhov
    Boyko Karadzhov avatar
    56 posts
    Registered:
    05 Dec 2016
    16 Jun 2014
    Link to this post
    Hello Daniel,

    I can see that the exception is thrown from a control named BrowseAndEditPageMenu. What version of Sitefinity are you running and where did you put the user control? Is it inside of another widget?

    Regards,
    Boyko Karadzhov
    Telerik
     
    Do you want to have your say in the Sitefinity development roadmap? Do you want to know when a feature you requested is added or when a bug fixed? Explore the Telerik Sitefinity CMS Ideas&Feedback Portal and vote to affect the priority of the items
     
  3. Dan
    Dan avatar
    3 posts
    Registered:
    27 Aug 2013
    17 Jun 2014 in reply to Boyko Karadzhov
    Link to this post

    Its just a master page, with usercontrols inside.  No widgets.  I figured out the problem to any future visitors who might have the same problem, it was that jquery.cookie was not defined anywhere in the project, but called in certain places.  I just added the js plugin into the master page and everything now works fine.

  4. Boyko Karadzhov
    Boyko Karadzhov avatar
    56 posts
    Registered:
    05 Dec 2016
    18 Jun 2014
    Link to this post
    Hi Daniel,

    Thank you for the response.

    I'm glad that you have found a solution. The control should have taken care of all of its js dependencies in most scenarios.

    Regards,
    Boyko Karadzhov
    Telerik
     
    Do you want to have your say in the Sitefinity development roadmap? Do you want to know when a feature you requested is added or when a bug fixed? Explore the Telerik Sitefinity CMS Ideas&Feedback Portal and vote to affect the priority of the items
     
4 posts, 0 answered