Вопрос

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

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

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

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

кто-нибудь?

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

На странице:

this.Form.Action = null;

или:

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

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

this.Form.setAttribute("действие", "ABC/123.aspx");

Если вы обновитесь до ASP.NET 3.5 SP1, свойство action теперь распознано правильно и может быть набор из codebehind.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top