IsPostBack всегда возвращает false - PullRequest
3 голосов
/ 07 июля 2011

Я столкнулся со странной проблемой. Каждый раз, когда я обновляю страницу, IsPostBack ложно.
Чтобы убедиться, что ничего в моем содержимом или главных страницах не вызывает этого, я создал пустую веб-форму и запустил ее в режиме отладки. тем не менее, для обратных передач я установил IsPostBack в значение false.

У меня есть enableSessionState="true" и <sessionState timeout="30" /> в web.config.

Это сводит меня с ума!

Обновление: Я обновляю страницу, нажимая F5. На основании ответов это не должно вызывать обратную передачу. Я хотел бы знать, когда пользователь обновляет страницу (даже вручную) и предотвращает некоторые изменения в БД).
Есть ли решение для этого?

Ответы [ 5 ]

11 голосов
/ 07 июля 2011

Обновление страницы (нажатие F5 или кнопка обновления в вашем браузере) не является обратной передачей. Обратная передача происходит при нажатии кнопки, изменении выпадающего списка или каком-либо другом событии на странице, которое вызывает отправку данных на сервер (через HTTP POST, отсюда и название «обратная передача»)

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

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

В ASP.NET есть два типа запросов (в некотором смысле):

  • обычный запрос (например, пользователь загружает страницу в первый раз)
  • постбэк (например, нажатие кнопки на странице, отправка данных на сервер)

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

Session["UserHasVisitedThisPageBefore"] = true;

Затем вы можете проверить его вместо текущего IsPostBack чека:

if(Session["UserHasVisitedThisPageBefore"] != null && (bool)Session["UserHasVisitedThisPageBefore"])
{
    // stuff here
}
5 голосов
/ 07 июля 2011

При обновлении страницы значение IsPostBack должно быть ложным.Оно становится истинным, когда элемент управления вызвал обратную передачу, например кнопку на стороне сервера.

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

 if(IsPostBack)
 {
   //Update DB
 }
2 голосов
/ 07 июля 2011

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

1 голос
/ 13 июля 2013

У меня была проблема с тем, что IsPostBack всегда был ложным в конкретном проекте, в котором XSL отображал разметку. Поэтому вместо того, чтобы полагаться на свойство IsNET в .NET, я просто проверил Request.HttpMethod.

например. если мне нужно проверить! IsPostBack, я вместо этого проверил, если Request.HttpMethod == "GET"

например. если мне нужно было проверить IsPostBack, я вместо этого проверил, если Request.HttpMethod == "POST"

1 голос
/ 07 июля 2011

Каждый раз, когда вы обновляете страницу, вы в основном выполняете запрос GET к вашей странице.GET означает, загрузить страницу без каких-либо изменений состояния сервера.IsPostBack = false - абсолютно правильное поведение!

Обратная передача произойдет на странице, если вы выполните POST для нее.Затем отправляется форма на стороне сервера или запускается веб-элемент управления с autoPostBack - это может вызвать обратную передачу.IsPostBack будет правдой.

...