Зарегистрированный скрипт оповещения вызван BrowserBack

У меня есть небольшой класс, который отображает предупреждение через Javascript. Я использую этот класс на странице, которая проверяет, ввел ли пользователь действительный почтовый индекс. Если действительный почтовый индекс не введен, отображается предупреждение, и страница отправляется обратно на ту же страницу, чтобы они могли ее изменить. Если они введут действительный почтовый индекс, они будут перенаправлены на другую страницу. Проблема в том, что если они нажимают кнопку «Назад» в своем браузере, предупреждение отображается независимо от того, действителен почтовый индекс или нет.

Вот поток:

Страница ввода почтового индекса -> Введите почтовый индекс -> Проверить почтовый индекс

если верный zip -> goto overview.aspx если недействительный почтовый индекс, перейти на страницу ввода почтового индекса

На overview.aspx, если они нажимают кнопку «Назад» в браузере, отображается предупреждение. Я не хочу, чтобы это случилось. Ниже приведен код, который у меня есть для класса предупреждений, который отлично работает. И ниже код, который проверяет и отображает предупреждение при нажатии LinkButton.

protected void GotoReview(object sender, EventArgs e) {
    if (ValidateZipCode(ZipCode)) {
        Response.Redirect(string.Format("~/checkout/overview.aspx?pc = {0}&zc = {1}",
        ProductCode, ZipCode));
    }
    else {
        Alert.Show("The entered zip code is invalid. Please ensure the zip code is a valid zip code.");
    }
}

private bool ValidateZipCode(string zip) {
    if (zip.Length < 5 || zip.Length > 5) {
        return false;
    }
    if (!Regex.IsMatch(zip, @"^(\d{5}-\d{4})|(\d{5})$")) {
        return false;
    }
    return true;
}

public static class Alert {
    public static void Show(string message) {
        string cleanMessage = message.Replace("'", "\\'");
        string script = "<script type=\"text/javascript\">alert('" + cleanMessage + "');</script>";
        Page page = HttpContext.Current.CurrentHandler as Page;
        if (page != null && !page.ClientScript.IsClientScriptBlockRegistered("alert")) {
            page.ClientScript.RegisterClientScriptBlock(typeof(Alert), "alert", script);
        }
    }
}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
626
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Я думаю, что значение zipcode теряется при перенаправлении (но добавленный скрипт остается как есть).

Почему бы вам не поместить проверку в javascript (на странице с полем ввода почтового индекса)?
Не похоже, что для проверки нужны вещи со стороны сервера (так как вы выполняете проверку длины и проверку регулярного выражения)

Я могу подтвердить, что почтовый индекс правильно сохранен (Session["zc"]) и отправлен на overview.aspx с zip.aspx. Для упрощения, когда пользователь находится на overview.aspx и нажимает кнопку «Назад» в своем браузере, именно тогда выполняется сценарий оповещения. Я попытался поставить точку останова в отладчике, но он так и не был вызван. Итак, единственное предположение, которое у меня есть сейчас, - это зарегистрированные скрипты, которые вызываются при использовании кнопки «Назад»?

Я не понимаю, почему скрипт выполняется при назад, даже если zip был действителен при вперед. : \

при нажатии кнопки LinkButton браузер запрашивает ту же страницу (страницу ввода почтового индекса), а затем перенаправляется на overview.aspx (если все в порядке). Но когда вы нажимаете кнопку «Назад», кажется, что браузер выполняет предыдущий запрос - проверяет почтовый индекс, а не отображает страницу ввода почтового индекса.

В любом случае такую ​​проверку лучше проводить на клиенте, как заявил шахкалпеш.

Ответ принят как подходящий

Кнопки «Назад» работают по-разному во всех браузерах, некоторые браузеры будут загружать самую новую версию, другие просто возвращают последнюю копию на диске.

Лучшее, что можно сделать здесь, - это, вероятно, отказаться от старого javascript и добавить OnSubmit в форму для проверки правильности проверки, jquery будет отличным инструментом в этом случае.

С помощью этого метода, независимо от стратегии браузера, ваше предупреждение не будет вызываться, пока они не нажмут кнопку отправки.

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