Кнопка возврата браузера загружает старую страницу со старой javascript - PullRequest
0 голосов
/ 25 марта 2020

Страница 1 имеет текущий код logi c при нажатии кнопки

If MyDataIsValid() Then
    ScriptManager.RegisterStartupScript(me, me.GetType(), "PopUp", "", False)
    Response.Redirect("~/Page2", false)
Else
    ScriptManager.RegisterStartupScript(me, me.GetType(), "PopUp", <some js for a popup>, False)
End If

Если в первый раз я нажимаю кнопку и данные недействительны, то появится всплывающее окно. Второй раз я использую действительные данные, и страница перенаправляет на страницу Page2. Если я вернусь назад, нажав кнопку «Назад» в браузере, появится всплывающее окно. Это проблема, всплывающее окно сообщит мне, что мои данные неверны.

Я знаю, что могу сделать кнопку на странице 2, чтобы перенаправить меня на страницу 1, но я также хочу, чтобы кнопка возврата браузера работала правильно.

При переходе назад с помощью кнопки «Назад» браузера событие «Загрузка» на странице Page1 не запускается. Страница загружает кэшированную страницу в первый раз, когда я нажимаю кнопку.

Я пытался

Response.Cache.SetCacheability(HttpCacheability.NoCache)

или

Response.Buffer = true
Response.CacheControl = "no-cache"
Response.AddHeader("Pragma", "no-cache")
Response.Expires = -1441

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

1 Ответ

1 голос
/ 25 марта 2020

Это ваше решение: установите в вашем скрипте значение «Пусто / Ничего» перед перенаправлением маршрутов на другую страницу.

Private Sub WebForm1_PreLoad(sender As Object, e As EventArgs) Handles Me.PreLoad
    If Session.Item("Script") IsNot Nothing Then
        ScriptManager.RegisterStartupScript(Me, Me.GetType(), "PopUp", "<script type='text/javascript'>" & CStr(Session.Item("Script")) & "</script>", False)
    End If
End Sub


Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    If MyDataIsValid() Then
        Session.Item("Script") = ""
        Response.Redirect("~/Page2.aspx")
    Else
        Session.Item("Script") = "alert('Script is running')"
        ScriptManager.RegisterStartupScript(Me, Me.GetType(), "PopUp", "<script type='text/javascript'>" & CStr(Session.Item("Script")) & "</script>", False)
    End If
End Sub

Чтобы избежать кэширования страниц из-за работы браузера над ним, история по Javascript (на стороне клиента) следующее.

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    If MyDataIsValid() Then

        Session.Item("Script") = ""
        Response.Redirect("~/Page2.aspx")

    Else

        Dim sbScript As StringBuilder = New StringBuilder()
        sbScript.AppendLine("( function () {   window.history.pushState(window.history.state, " &
                            " 'Not allowed', " &
                            " 'https://yourdomain.com/page2.aspx'); }()); ")

        ScriptManager.RegisterStartupScript(Me,
                                            Me.GetType(),
                                            "PopUp",
                                            "<script type='text/javascript'>" & sbScript.ToString & "</script>",
                                            False)

    End If

End Sub

Однако выполните проверку всех элементов управления с помощью Javascript, если это возможно, поскольку сторона клиента имеет больший контроль над браузером, чем сторона сервера

...