以下是我的按钮:
<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" />
在Page_Init
期间执行此代码:
NextButton.Visible = bNextEnabled;
PreviousButton.Visible = bPreviousEnabled;
此时bNextEnabled
和bPreviousEnabled
都是True
。
Page_Init
Response.Write(NextButton.Visible.ToString())
的末尾是True
。
Page_Init
Response.Write(PreviousButton.Visible.ToString())
的末尾是True
。
-
Page_Load
Response.Write(NextButton.Visible.ToString())
的开头是False
。
Page_Load
Response.Write(PreviousButton.Visible.ToString())
的开头是True
。
我已经推断了按钮的代码,但我会提供其他可能相关的内容,但我不知道那可能是什么。
页面上的任何其他位置都没有更改任何按钮的Visible属性。按钮停止工作的页面是回发。回发之前的页面两个按钮都设置为Visible = false
,但我无法想象这会如何影响。
那么这里发生了什么?两个按钮使用完全相同的代码,但是一个按预期工作,另一个不按..
答案 0 :(得分:4)
这很可能与保存到ViewState中的属性设置有关。这是Init
和Load
之间唯一可能对控件属性产生影响的事情(据我所知)。在加载ViewState的值之前以及在打开ViewState跟踪之前触发Init,因此您可以在那里更改它,然后在加载ViewState时它会被覆盖。
如果您无法在Load
事件而非Init
中设置这些属性,则可以尝试使用PreLoad
事件。
这是a good reference for the page lifecycle以及发生时的情况。