проблема окна оповещения - PullRequest
1 голос
/ 01 марта 2010

как сначала показать окно предупреждения, а затем выйти из системы

if (machineID.Count != 0)
            {

                checkMachineGrpState(machineID);
        else
                {
                    Response.Write("<script>alert('You are being logged out')</script>");

                   GoSignOut();
                }
    }

 private void GoSignout()
    {
        FormsAuthentication.SignOut();
        Session.Abandon();
        Response.Redirect("~/Default.aspx");
    }

здесь, если я не вызываю функцию GosignOut, я вижу окно оповещения, но в тот момент, когда я ставлю вызов для выхода, оно не отображает окно оповещения и просто выходит из системы

Так что я подумал, есть ли способ сначала увидеть окно оповещения, а затем, когда я нажимаю ОК, это должно вызвать функцию выхода из моего кода ... спасибо

Ответы [ 2 ]

1 голос
/ 01 марта 2010

Response.write записывает данные в браузер, а когда браузер загружает страницу, он анализирует эти данные (отображает html и выполняет js). Никаких дальнейших сообщений или отзывов на сервер (где работает код веб-формы asp.net) не происходит, если браузер не связывается с сервером через GET или POST (отправка формы, ссылка, ajax).

Происходит следующее: вы направляете вывод клиенту, а затем немедленно вызываете Response.Redirect, поэтому клиент никогда не получает ваш вывод. Вместо этого он просто перенаправляет сразу и затем отображает страницу default.aspx.

То, что вы могли бы сделать, это все еще сделать перенаправление, но передать некоторые данные клиенту (строка запроса могла бы быть способом сделать это), и тогда страница default.aspx будет знать, чтобы искать эти данные. Если эти данные будут найдены, будут выполнены любые необходимые действия. В вашем случае вы хотите, чтобы он предупреждал пользователя.

Одним из способов сделать это является перенаправление на «~ / Default.aspx? Alert = 1». В default.aspx при загрузке страницы он просматривает строку запроса и проверяет наличие ключа предупреждения со значением 1. Если бы это было так, он выполнил бы ваше предупреждение.

1 голос
/ 01 марта 2010

используйте клиентское нажатие кнопки на стороне сервера, которая вызывает этот код выхода из системы, затем верните true

, например

<asp:Button id="button1" runat="server" OnClientClick="javascript:alert('You are being logged out');return true;" />

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

if (machineID.Count != 0)
            {

                checkMachineGrpState(machineID);
        else
                {
                   GoSignOut();
                  Page.ClientScript.RegisterStartupScript(this.GetType(), "Redirect", "<script>alert('You are being logged out');window.location.href='" + ResolveUrl("~/Default.aspx") + "';</script>");
                }
    }

 private void GoSignout()
    {
        FormsAuthentication.SignOut();
        Session.Abandon();
    }

если вам нужно разрешить перенаправлению перейти на страницу, отличную от страницы входа в систему (что вызвано из-за SignOut), вы можете добавить что-то подобное ниже в ваш web.config. Я не уверен на 100%, что вы хотите разрешить это, поскольку ни один из прошедших проверку пользователей не сможет получить доступ к странице

<location path="whateverpage.aspx">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>
...