У меня есть небольшой класс, который отображает предупреждение через 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);
}
}
}





Я думаю, что значение zipcode теряется при перенаправлении (но добавленный скрипт остается как есть).
Почему бы вам не поместить проверку в javascript (на странице с полем ввода почтового индекса)?
Не похоже, что для проверки нужны вещи со стороны сервера (так как вы выполняете проверку длины и проверку регулярного выражения)
Я могу подтвердить, что почтовый индекс правильно сохранен (Session["zc"]) и отправлен на overview.aspx с zip.aspx. Для упрощения, когда пользователь находится на overview.aspx и нажимает кнопку «Назад» в своем браузере, именно тогда выполняется сценарий оповещения. Я попытался поставить точку останова в отладчике, но он так и не был вызван. Итак, единственное предположение, которое у меня есть сейчас, - это зарегистрированные скрипты, которые вызываются при использовании кнопки «Назад»?
Я не понимаю, почему скрипт выполняется при назад, даже если zip был действителен при вперед. : \
при нажатии кнопки LinkButton браузер запрашивает ту же страницу (страницу ввода почтового индекса), а затем перенаправляется на overview.aspx (если все в порядке). Но когда вы нажимаете кнопку «Назад», кажется, что браузер выполняет предыдущий запрос - проверяет почтовый индекс, а не отображает страницу ввода почтового индекса.
В любом случае такую проверку лучше проводить на клиенте, как заявил шахкалпеш.
Кнопки «Назад» работают по-разному во всех браузерах, некоторые браузеры будут загружать самую новую версию, другие просто возвращают последнюю копию на диске.
Лучшее, что можно сделать здесь, - это, вероятно, отказаться от старого javascript и добавить OnSubmit в форму для проверки правильности проверки, jquery будет отличным инструментом в этом случае.
С помощью этого метода, независимо от стратегии браузера, ваше предупреждение не будет вызываться, пока они не нажмут кнопку отправки.