IsPostback = false, даже если Request.HttpMethod имеет значение "POST"? - PullRequest
4 голосов
/ 25 марта 2011

Я недавно взломал веб-формы, чтобы выяснить, возможно ли использовать с ним один из моих (маршрутизационных) проектов. Пока что это были только неприятности, но я почти дошел до того, что это "работает"

Я сделал страницу "Test.aspx". На Global.asax я сделал так, чтобы он подавался на /test вместо /Test.aspx. Это работает полностью. Он происходит от моего пользовательского класса страниц. Пользовательский класс находит HtmlForms на странице и переписывает их атрибут Action с правильным значением: /test.

Теперь я попал в большую кирпичную стену под названием Viewstate и ASP.Net events. Я добавил кнопку в Test.aspx с обработчиком OnClick. Я могу нажать на кнопку, и страница будет постбэк и тому подобное, но событие OnClick не произойдет. Я не понимаю, как простое изменение URL-адреса может нарушить ViewState, как это, так как у меня не было впечатления, что ViewState будет отслеживать такие вещи. Кроме того, IsPostback будет ложным, хотя HttpMethod == true. Это не имеет никакого смысла для меня.

Кроме того, я отключил EventValidation, потому что полагал, что это будет проблемой, но эта проблема сохраняется.

Как сделать так, чтобы viewstate и postback работали как обычно при перезаписи URL?

(Обратите внимание, что моя форма переписывания URL-адресов выполняет все внутренние операции, никогда не отправляется HTTP-перенаправление пользователю)

Ответы [ 2 ]

0 голосов
/ 29 марта 2016

IsPostBack используется для проверки того, поступает ли запрос от элемента управления самой страницы.

И HttpMethod используется для проверки типа запроса.

0 голосов
/ 25 марта 2011

Возможно, вам придется сообщить HttpContext, что URL-адрес также переписывается.

Попробуйте сделать что-то вроде этого:

HttpContext.Current.RewritePath("/test");
...