Я попробую этот вопрос.Упомянутый вами поток будет препятствовать нормальной работе страниц, что вы, конечно, уже имеете в виду.Хотя я бы сказал, что это может быть опасно (против ожидаемой функции) и неэффективно.Исходя из того, что я вижу из вашего вопроса, я бы окончательно удалил Page2 и Page3 и сохранил всю логику на одной и той же странице.
Я также был бы рад услышать то, что вы пытаетесь избежать, с этим?Это двойные посты?Как двойной пост контента в корзине?Частичные / неполные вставки ввода данных?Описанным способом воздействия на кнопки «назад» вы можете решить одну проблему, но поднять другую.Большой выбор браузеров, которые могут действовать совершенно по-разному в таких обходных ситуациях.
Я вижу два хороших варианта:
UserControl,
Создайте три элемента UserControl, каждый из которых имеет свою логику для каждой страницы.Вы можете программно загрузить их на страницу.Т.е. на bnButton_Click
событие.Пользовательские контролы загружаются с LoadControl("PathToAscxFileOnDisk.ascx")
.
Панели,
Я бы также подумал о трех <asp:PlaceHolder></asp:PlaceHolder>
или, может быть, лучше <asp:Panel></asp:Panel>
, чтобы вложить всю логику.
В этом случае вы полностью свободны от проблем обратной передачи и можете сосредоточиться на переносе своих функций в бизнес-логику и использовать Code-File для управления потоком при отображении / скрытии и заполнении элементов управления входом / выходом изпанели / usercontrols.Вы, вероятно, также можете управлять postback / click-URL и push-enter-key.
И вы упомянули Ajax,
Ajax абсолютно необходим для того, чтобы сделать вашу страницу без сохранения состояния (что означает, что вы можете работать без кэша,сессии, viewstate и т. д. Хотя проблема заключается в возможности пользователей перемещаться между страницами. Я думаю, что даже Ajax будет менее полезен, в то время как вы сохраняете трехстраничное решение.
Я бы личноскажем, это простая задача - переместить файлы aspx в каждый ascx и создать aspx в качестве мастер-контейнера. С этой опцией вы даже избегаете дублирования имен (как, например, копирование / вставка кода в панели) и проблем с потоком Page_Load /логика.