4

I am trying to get this javascript function to fire every time there is a postback in my ASP.net project using c#. I read online that if you create a pageLoad() function in Javascript, it will fire every time on a postback. I can't get it to fire. Here is all the code in my Site.Master file.

    <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="Weights.SiteMaster" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head runat="server">
        <title></title>
        <script type="text/javascript" src="<%=ResolveUrl("~/Scripts/jquery-1.4.1.min.js")%>"></script>
        <script type="text/javascript">
            function pageLoad() {
                if ($('#MainContent_ckbIncludeWeight').checked) {
                    $('#MainContent_txtPalletWeight').show();
                    console.log('it is checked!');
                    alert('it is checked!');
                }
                if (true) {
                    console.log('fire!');
                    alert('fire!');
                }
            }
        </script>
        <link href="~/Styles/Site.css" rel="stylesheet" type="text/css" />
        <asp:ContentPlaceHolder ID="HeadContent" runat="server">
        </asp:ContentPlaceHolder>
    </head>
    <body>
        <form runat="server">
        <div class="page">
            <div class="header">
                <div class="title">
                    <h1>
                        My ASP.NET Application
                    </h1>
                </div>
                <div class="loginDisplay">
                    <asp:LoginView ID="HeadLoginView" runat="server" EnableViewState="false">
                        <AnonymousTemplate>
                            [ <a href="~/Account/Login.aspx" ID="HeadLoginStatus" runat="server">Log In</a> ]
                        </AnonymousTemplate>
                        <LoggedInTemplate>
                            Welcome <span class="bold"><asp:LoginName ID="HeadLoginName" runat="server" /></span>!
                            [ <asp:LoginStatus ID="HeadLoginStatus" runat="server" LogoutAction="Redirect" LogoutText="Log Out" LogoutPageUrl="~/"/> ]
                        </LoggedInTemplate>
                    </asp:LoginView>
                </div>
                <div class="clear hideSkiplink">
                    <asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false" IncludeStyleBlock="false" Orientation="Horizontal">
                        <Items>
                            <asp:MenuItem NavigateUrl="~/Default.aspx" Text="Home"/>
                            <asp:MenuItem NavigateUrl="~/About.aspx" Text="About"/>
                        </Items>
                    </asp:Menu>
                </div>
            </div>
            <div class="main">
                <asp:ContentPlaceHolder ID="MainContent" runat="server"/>
            </div>
            <div class="clear">
            </div>
        </div>
        <div class="footer">

        </div>
        </form>
    </body>
    <script type="text/javascript">
        function pageLoad() {
            if ($('#MainContent_ckbIncludeWeight').checked) {
                $('#MainContent_txtPalletWeight').show();
                console.log('it is checked!');
                alert('it is checked!');
            }
            if (true) {
                console.log('fire!');
                alert('fire!');
            }
        }
        $(document).ready(function () {

            $('#MainContent_ckbIncludeWeight').click(function () {
                if (this.checked) {
                    $('#MainContent_txtPalletWeight').show();
                    $('#MainContent_txtPalletWeight').val('40');
                    $('#MainContent_txtPalletWeight').after("<span id='pound'>#</span>");
                }
                else {
                    $('#MainContent_txtPalletWeight').hide();
                    $('#MainContent_txtPalletWeight').val('');
                    $('#pound').remove();
                }
            });
        });
    </script>
</html>

I would appreciate any help. Thanks Mike

1

2 Answers 2

3

You're already using jQuery's $(document).ready, just add your code there as well. It will run every time page reloads:

    $(document).ready(function () {

        $('#MainContent_ckbIncludeWeight').click(function () {
            if (this.checked) {
                $('#MainContent_txtPalletWeight').show();
                $('#MainContent_txtPalletWeight').val('40');
                $('#MainContent_txtPalletWeight').after("<span id='pound'>#</span>");
            }
            else {
                $('#MainContent_txtPalletWeight').hide();
                $('#MainContent_txtPalletWeight').val('');
                $('#pound').remove();
            }
        });


        // Originally from function pageLoad()
        if ($('#MainContent_ckbIncludeWeight').checked) {
            $('#MainContent_txtPalletWeight').show();
            console.log('it is checked!');
            alert('it is checked!');
        }
        if (true) {
            console.log('fire!');
            alert('fire!');
        }


    });
Sign up to request clarification or add additional context in comments.

5 Comments

I already tried it in document.ready, but after research I read an article that says code in document.ready does on fire on postbacks, only on initial page load. encosia.com/document-ready-and-pageload-are-not-the-same
Is your page doing full postback or partial postback via UpdatePanel?
Not sure what UpdatePanel is, but I'm thinking full postback.
UpdatePanel allows you to update parts of the page without full page refreseh. It looks like you're not using it and in that case according to that article it's OK to use $(document).ready
You are correct, for some reason, I thought it wasn't working when I stuck it in document.ready before. It's working now. Thanks
1

You have to have ScriptManager on page in order for pageLoad() to work. There is however no need for adding it, if you just want to run some script on every postback.

You can do something like putting this:

<asp:PlaceHolder ID="phPageLoad" runat="server">
  <script type="text/javascript">
        if ($('#MainContent_ckbIncludeWeight').checked) {
            $('#MainContent_txtPalletWeight').show();
            console.log('it is checked!');
            alert('it is checked!');
        }
        if (true) {
            console.log('fire!');
            alert('fire!');
        }
  </script>
</asp:PlaceHolder>

into your master page and in codebehind of master page add this to Page_Load:

phPageLoad.Visible = Page.IsPostback;

2 Comments

I did that and in the codebehind(which I assume is Site.Master.cs) I get this error when I add that line: Error 2 The name 'phPageLoad' does not exist in the current context
Then phPageLoad is not automatically generated in Site.Master.designer.cs for whatever reason; check if the placeholder is inside the <form runat="server"> tag and if it doesn't work declare it explicitly in your Site.Master.cs like protected PlaceHolder phPageLoad;

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.