Urlrewriting.net IsPostBack всегда ложь

Я работаю над переписыванием URL-адресов Urlrewriting.net и столкнулся с тем, что кажется общей проблемой, но, похоже, я могу ее исправить. Я представлю упрощенный случай.

Перезапись URL отлично работает с правилом:

<urlrewritingnet rewriteOnlyVirtualUrls="true" defaultPage="default.aspx" defaultProvider="RegEx" xmlns="http://www.urlrewriting.net/schemas/config/2006/07">
   <rewrites>
       <add name="catalog" virtualUrl="^~/catalog/(.*)/(.*).aspx" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/catalog.aspx?cid=$1&amp;c=$2" ignoreCase="true"/>
   </rewrites>
</urlrewritingnet>

На странице у меня есть DataList с 2 кнопками asp: внутри. При нажатии страница обновляется, но ничего не делает.

Я последовал за статьей ScottGu, чтобы внедрить адаптер управления формой, чтобы переписать действие формы в соответствии с переписанным URL.

URL страницы в браузере: http://...../dev/catalog/13/Music.aspx

<form name="aspnetForm" method="post" action="/dev/catalog/13/Music.aspx" id="aspnetForm"> 

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

Проблема теперь в том, что каждый раз, когда страница загружается, Page.IsPostback имеет значение false, что заставляет страницу перепривязывать DataList и, следовательно, игнорировать ItemCommand, который должны вызывать кнопки.

if (!Page.IsPostBack)
     PopulateControls();

Я использую.NET 3.5 SP1, на главной странице есть ScriptManager, но на этой странице нет UpdatePanel. Я также попытался сбросить свойство Form.Action и обойти решение ScottGu с тем же результатом. Если я перехожу на страницу URL напрямую, без использования переписывателя, все работает нормально.

Что мне не хватает?

5 ответов

Это проблема LinkButton, все ссылки должны быть удалены со страницы, включая главную страницу.

Упорство окупается. Оказывается, проблема заключалась в следующем коде на главной странице:

<asp:LinkButton runat="server" PostBackUrl="~/basket.aspx" Text="View Cart" CausesValidation="false" />

Я заменил это стандартным <a> тег и все работает отлично.

НЕТ ИДЕИ, почему это будет иметь значение здесь. Я предполагаю, что при переписывании URL-адресов любой PostBackUrl или NavigateUrls сломают обратные ссылки.

Это беспокоило меня 4 часа подряд.

Ответ, который я использовал, на самом деле удалял все postbackurl и navigateurl.

Все остальное не удалось, но это сработало как шарм. Действительно безумный, как это было проблемой, но это так.

Я столкнулся с той же проблемой - UrlRewriter и значение обратной передачи кнопки всегда ложно. (кнопки LinkButton с PostBackUrl не указаны)

Я добавил ScottGu FormControlAdapter, и он работал для меня - ОДНАКО - через некоторое время я заметил, что время моей загрузки ДЕЙСТВИТЕЛЬНО страдает. Я в конце концов отследил его до base.Render(new RewriteFormHtmlTextWriter(writer)); событие в FormControlAdapter, которое иногда может занять более 5 секунд.

Если я удалю FormControlAdapter из моего файла.browser, кнопка домашней страницы больше не будет отправлять сообщения правильно (всегда false).

На моей домашней странице отображался тег формы с пустым атрибутом действия<form action="" >

В моей ситуации рассматриваемая кнопка находится на моей главной странице. Путем ручного задания действия формы в событии Page_Load моего MasterPage (в моем случае это "default.aspx"), я смог удалить FormControlAdapter, и кнопка верна обратно.

protected void Page_Load(object sender, EventArgs e)
 {
     if (Request.RawUrl == "/" || Request.RawUrl == "/default.aspx")
         form1.Action = "default.aspx";
     else
         form1.Action = Request.RawUrl;

Так что, похоже, все, что действительно необходимо, это установить форму Action. Решение ScottGu прекрасно и гибко, но кажется очень медленным

Сэмми прав. Я провожу около 5 часов, пока не найду проблему.

Я прочитал много статей о "перезаписи URL-адресов в ASP.NET и проблемах обратной передачи", пока не нашел проблему. Вам не нужны такие решения, как: http://weblogs.asp.net/jezell/archive/2004/03/15/90045.aspx и они также не работают...

РЕШЕНИЕ: Вы можете использовать asp: Linkbutton, asp:Button, asp:ImageButton, НО НЕ УСТАНАВЛИВАЙТЕ их postbackurl. Просто используйте < a > тег вместо кнопки ссылки.

Другие вопросы по тегам