Here are my buttons:
<asp:Button ID="PreviousButton" CssClass="previous-button button" Text="Previous" Visible="false" OnClick="PreviousButton_Click" runat="server" />
<asp:Button ID="NextButton" CssClass="next-button button" Text="Next" Visible="false" OnClick="NextButton_Click" runat="server" />
During Page_Init this code is executed:
NextButton.Visible = bNextEnabled;
PreviousButton.Visible = bPreviousEnabled;
Both bNextEnabled and bPreviousEnabled are True at this point.
At the end of Page_Init Response.Write(NextButton.Visible.ToString()) is True.
At the end of Page_Init Response.Write(PreviousButton.Visible.ToString()) is True.
—
At the start of Page_Load Response.Write(NextButton.Visible.ToString()) is False.
At the start of Page_Load Response.Write(PreviousButton.Visible.ToString()) is True.
I’ve extrapolated the code for the buttons but I’ll provide anything else that might be pertinent, though I have no idea what that might be as yet.
At no other point on the page is the Visible property for either button altered. The page where the buttons stop working is a postback. The page prior to the postback both buttons are set to Visible = false though I can’t imagine how this would effect things.
So what’s happening here? Both buttons use exactly the same code and yet one works as expected and the other doesn’t..
It’s most likely related to the settings for the property getting saved into ViewState. That’s the only thing between
InitandLoadthat might have an effect on the control properties such as this (as far as I can tell). Init fires before the values from ViewState have been loaded and before ViewState tracking has been turned on, so it’s possible you change it there and then it gets overwritten when the ViewState gets loaded.If there’s a reason you can’t set these properties in the
Loadevent instead ofInit, you could try using thePreLoadevent instead.Here’s a good reference for the page lifecycle and what’s happening when.