перезапись URL + Форма входа в Asp.Net = Смерть - PullRequest
1 голос
/ 06 марта 2009

на нашем сайте мы переписываем URL, чтобы генерировать огромное количество страниц, созданных базой данных. на каждой странице есть контроль входа в систему для пользователей. как это:

Внутренняя страница aspx: /DB.aspx?id=123 URL, видимый пользователю: /ABC/123.aspx, /ABC/456.aspx ... (переписанный URL)

к сожалению, тег на каждой странице имеет атрибут действия "DB.aspx? Id = 123". когда пользователь нажимает кнопку, которую браузер публикует в /ABC/DB.aspx?id=123, чего, конечно, не существует.

решений, которые я попробовал: 1. измените атрибут действия, создав подкласс HtmlForm. это уничтожает все остальные формы на сайте. 2. удалите атрибут действия (чтобы браузер всегда публиковал по одному и тому же URL). это работает на переписанных страницах, но в "/" (default.aspx в корневом каталоге) я получаю сообщение о том, что публикация глагола не разрешена в "/" (iis 6 и я не могу контролировать сопоставления)

кто-нибудь?

Ответы [ 4 ]

1 голос
/ 07 марта 2009

Проверьте это действительно хорошее сообщение в блоге от Скотта Гу, http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx.

"В частности, вы можете воспользоваться новой архитектурой расширяемости адаптера элемента управления ASP.NET 2.0 для настройки рендеринга элемента управления и переопределить его значение атрибута" action "на указанное вами значение. Для этого не требуется изменить любой код на ваших страницах .aspx "

Проверьте раздел: «Обработка почтовых пакетов ASP.NET с перезаписью URL», я успешно использовал опубликованный им адаптер.

Ps. Имейте в виду, что на asp.net есть некоторые проблемы при использовании перезаписи URL при использовании сеанса без cookie, и переписанный URL глубже, чем исходная страница, точно так же, как у вас. (/ abc / apage vs. / db?). Проблема прямо в исходном коде фреймворка, есть обходные пути, но это целая тема (с компромиссами :( ... вы можете захотеть, чтобы они были на одном уровне).

0 голосов
/ 07 марта 2009

При обновлении до ASP.NET 3.5 с пакетом обновления 1 (SP1) свойство действия теперь правильно распознается и может быть установлено из codebehind .

0 голосов
/ 07 марта 2009

Я никогда не делал этого, но я видел код с помощью Reflector, и я думаю, вы можете исправить это следующим образом:

На странице:

this.Form.Action = null;

или

this.Form.SetAttribute("action", null);

Если это не сработает, просто укажите желаемый путь:

this.Form.SetAttribute ("action", "ABC / 123.aspx");

0 голосов
/ 06 марта 2009

Семантика может быть, но атрибут действия = "DB.aspx? Id = 123" или "/DB.aspx?id=123"? Предполагая, что перезапись URL-адреса позволяет переходить на физические страницы, это может быть вашей проблемой.

...