2012-03-08 72 views
1

這裏是我的按鈕:按鈕的Visible屬性改變其間的Page_Init和Page_Load中

<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; 

兩個bNextEnabledbPreviousEnabledTrue在這一點上。

Page_InitResponse.Write(NextButton.Visible.ToString())的末尾是True

Page_InitResponse.Write(PreviousButton.Visible.ToString())的末尾是True

-

截至Page_LoadResponse.Write(NextButton.Visible.ToString())開始爲False

Page_LoadResponse.Write(PreviousButton.Visible.ToString())的開頭是True

我推斷的按鈕的代碼,但我會提供其他任何可能是恰當的,雖然我不知道,可能是至今。

頁面上沒有任何其他點是任何按鈕的Visible屬性被更改。按鈕停止工作的頁面是回發。雖然我無法想象這將如何影響事情,但回發前的頁面都設置爲Visible = false

那麼這裏發生了什麼?兩個按鈕使用完全相同的代碼,但一個按預期工作和其他沒有..

回答

4

它是最有可能與該屬性的設置得到保存到ViewState中。這是InitLoad之間唯一可能對控制屬性產生影響的東西(據我所知)。在ViewState的值被加載之前以及在ViewState跟蹤被打開之前,Init會觸發,因此您可能會在那裏更改它,然後在ViewState加載時它會被覆蓋。

如果您不能在Load事件而不是Init事件中設置這些屬性,您可以嘗試使用PreLoad事件。

這裏的a good reference for the page lifecycle和發生了什麼事的時候。

+0

好吧,這是有道理的,我懷疑這可能是沿着這些線。但是,這並不能解釋爲什麼只有下一個按鈕才生效。在前一頁上,兩個按鈕都隱藏起來,所以不應該在viewstate中留下任何兩個按鈕?什麼可能會導致這種不一致? 我不認爲我可以使用PreLoad,因爲這是在一個UserControl中,而不是一個Page。 – Jon 2012-03-08 18:25:26

+1

在沒有全部代碼的情況下調試您的問題將會很困難。您可以將按鈕設置爲EnableViewState =「false」,以查看會發生什麼情況,並幫助驗證問題所在。 – patmortech 2012-03-08 18:50:21

+0

我明白了。該方案是巨大的,但我不能現實地做到這一點。我選擇了我希望的重要部分,因爲我花了很長時間調試並排除了我在程序中所能做的所有事情。通過在整個程序中輸出Visible屬性到屏幕上,我基本上已經將它釘在Init和Load之間的黑盒子上。這是我希望聽到答案的那些問題之一,因爲兩個看似相同的按鈕之間的行爲顯然不一致。 – Jon 2012-03-08 21:48:28