2012-03-08 2 views
1

Вот мои кнопки:Баттона изменения 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; 

Оба bNextEnabled и bPreviousEnabled являются True в этой точке.

В конце 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. Это единственное, что существует между Init и Load, что может повлиять на свойства управления, такие как это (насколько я могу судить). Init запускается до того, как значения из ViewState были загружены и до того, как отслеживание ViewState включено, так что вы можете его изменить там, а затем перезаписывать при загрузке ViewState.

Если есть причина, вы не можете установить эти свойства в событии Load вместо Init, вы можете попробовать использовать событие PreLoad.

Это a good reference for the page lifecycle и что происходит, когда.

+0

Хорошо, это имеет смысл, я подозревал, что это может быть что-то в этом роде. Однако это не объясняет, почему выполняется только следующая кнопка. На предыдущей странице обе кнопки скрыты, поэтому ничего не осталось в эффекте viewstate для обеих кнопок? Что может вызвать эту несогласованность? Я не думаю, что могу использовать PreLoad, как это делается в UserControl, а не на странице. – Jon

+1

Было бы сложно отладить вашу проблему без использования всего кода. Вы можете установить кнопки EnableViewState = "false", чтобы увидеть, что происходит, и помочь проверить, где проблема. – patmortech

+0

Я понимаю. Программа огромна, хотя я не могу это сделать реалистично. Я выбрал то, что, надеюсь, важные части, поскольку я долгое время отлаживал и практически лишил все, что мог, в программе.Вывод свойства Visible на экран во время моей программы я по существу прибил его к черному ящику, который происходит между Init и Load. Это один из тех вопросов, о которых я просто хотел бы услышать ответ из-за, по-видимому, непоследовательного поведения между двумя, казалось бы, идентичными кнопками. – Jon

Смежные вопросы