Всякий раз, когда вызывается RewritePath (), Page.IsPostBack имеет значение false - PullRequest
1 голос
/ 23 марта 2011

Я занимаюсь разработкой пользовательского URL Rewriter для проекта ASP.Net 3.5.Этот перезаписчик функционально не отличается от большинства переписчиков, с той лишь разницей, что дружественная коллекция URL не загружается из файла web.config - вместо этого она поступает из базы данных.Я сделал наивное предположение, что было бы легко разработать собственный модуль перезаписи с нуля, но теперь я знаю беспорядок, в который я себя ввел. Я отвлекся;Давайте сразу перейдем к техническим вопросам.

Во время тестирования переписчика я настроил дружественный URL-адрес, который приведет пользователя к веб-форме.Постбэки из этой формы не должны изменять дружественный адрес, как можно было бы ожидать, поэтому

http://my.web.site/app_root/FriendlyURL всегда переписывается как http://my.web.site/app_root/not_friendly/form.aspx

Все хорошо, когда браузер впервые загружает FriendlyURL.Страница появляется и полностью функциональна.Однако, когда форма отправляется обратно на сервер, страница просто перезагружается, но на стороне сервера IsPostBack имеет значение false.Это похоже на F5, за исключением того, что действительно произошел HTTP POST.

Неудивительно, что когда взаимодействие происходит через «недружественный» URL, действие POST запускает обратную передачу, как и ожидалось.Это свидетельствует о том, что HttpContext.RewritePath каким-то образом портит жизненный цикл страницы таким образом, что теряет смысл операции обратной передачи.Любые направления?Спасибо.

1 Ответ

3 голосов
/ 24 марта 2011

Благодаря StackOverflow еще одна почти дублирующаяся проблема дала мне подсказки по поводу основной проблемы.Короче говоря,

Компоненты на стороне сервера, которые устанавливают атрибут PostBackUrl , путаются с системой переписывания путей во время обратных передач.Или система обратной передачи испортилась во время переписывания пути.(Причинная связь неясна, но эффект - это то, что я описал в вопросе.)

Любой asp: LinkButton, asp: Button или asp: ImageButton, который устанавливает PostBackUrl (либо на уровне формы, главной страницы, либо на уровне управления пользователями) приведет к тому, что веб-формы будут содержать скрытый элемент __PREVIOUSPAGE, содержимое которого непрозрачно, но оно играет определенную роль во время обратных передач.Это была моя проблема: было несколько asp: LinkButtons, которые устанавливают атрибут PostBackUrl.

Когда страница (форма + главная страница + пользовательские элементы управления) свободна от PostBackUrl 'd элементов, __PREVIOUSPAGE исчезает, а постбэк-беспорядок исчезает.Поэтому после того, как я просмотрел каждый asp: LinkButton на всем сайте и преобразовал их в обычные <a> элементы, проблема была решена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...