Member 13005002 Ответов: 1

Пользовательский таймер обратного отсчета для продолжения обратного отсчета на каждой веб-странице


Ниже приведены мои кодировки (C#) для веб-страницы входа (с помощью Visual Studio), чтобы активировать таймер обратного отсчета на главной странице, когда я нажал на кнопку "Войти" на странице входа. Система может перенаправить на страницу StaffWelcome, но функция Timer () (javascript.js) на мастер. участке не был выполнен. Но если я уберу ответ.Оператор Redirect функция Timer () на master. site была успешно выполнена. Таким образом, мне нужен экспертный совет о том, как заставить таймер() продолжать обратный отсчет на каждой веб-странице при перенаправлении на страницу приветствия после успешной аутентификации.

protected void LoginBtn_Click(object sender, EventArgs e) //Staff Login
{
    if (AuthenticateUser(txtUserName.Text, txtPassword.Text))
    {
        Master.Timer();

        Session["username"] = txtUserName.Text;

        Response.Redirect("~/StaffWelcomePage.aspx?UserName=" + txtUserName.Text);

    }
    else
    {
        MsgBox("Invalid User Name and/or Password");
        lblMessage.Text = "Invalid User Name and/or Password";
    }
}


Метод кодирования на сайте. master показан ниже.
public void Timer()
{
    //lblTimer.Text = "TimerActivated";
    Page.ClientScript.RegisterStartupScript(GetType(), "Javascript", "countdownJS()", true);
}


Файл сценария обратного отсчета в папке сценария выглядит следующим образом:
function countdownJS() 
{

    //document.getElementById('timer').innerHTML = 6 + ":" + 00;
    startTimer();

    function startTimer() {
        var presentTime, timeArray, m, s, x;
        presentTime = document.getElementById('lblTimer').innerHTML;
        timeArray = presentTime.split(/[:]+/);
        m = timeArray[0];
        s = checkSecond((timeArray[1] - 1));

        x = m.toString() + s.toString();

        if (s == 59) { m = m - 1 }

        if (x == 500) { window.open("http://asc-insilico/ASCDomainFB/Reminder5Min.aspx", "CountdownTimer", "height=200,width=500"); }

        if (x < 1) { window.location = "http://asc-insilico/ASCDomainFB/LoginPage.aspx"; }


        document.getElementById('lblTimer').innerHTML = m + ":" + s;

        setTimeout(startTimer, 1000);
    }

    function checkSecond(sec) {
        if (sec < 10 && sec >= 0) { sec = "0" + sec }; // add zero in front of numbers < 10
        if (sec < 0) { sec = "59" };
        return sec;
    }

}


Что я уже пробовал:

CodeProject, W3Schools, Google Search, Stackoverflow.

Darshan E Ksheerasagar

Используйте Ajax Таймер

1 Ответов

Рейтинг:
2

Richard Deeming

Упрощенно говоря, вам просто нужно переместить Master.Timer() вызов к коду-зад StaffWelcomePage.aspx страница.

Тем не менее, вы должны понимать, как ASP.NET работает. Когда вы нажимаете на ссылку, или нажимаете на кнопку, или иным образом вызываете обратный отсчет или навигацию, любой Javascript перестает выполняться. В зависимости от того, на что вы нажали, содержимое <form runat="server"> может быть отправлен на сервер. Сервер обработает запрос, выполнит ваш серверный код, сгенерирует ответ и отправит его клиенту. Затем клиент загружает ответ, обычно заменяя старую страницу новым ответом с сервера.

Вот почему ваш код в настоящее время не работает: HTML-ответ, содержащий код Javascript для вызова вашего кода. countdownJS функция никогда не отправляется клиенту, потому что Response.Redirect вызов говорит браузеру немедленно запросить новую страницу, игнорируя любой контент, возвращенный в текущем ответе.

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

Вы также обнаружите, что window.open вызов будет заблокирован блокировщиком всплывающих окон браузера, потому что он не открывается в ответ на действие пользователя.


ZurdoDev

+5. Хорошее объяснение.