1

如何先显示警报框然后注销

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 函数,我可以看到警报框,但是当我调用注销时,它不会向我显示警报框,而只是注销

所以我在想是否有一种方法可以让我首先看到警报框,然后当我按下确定时,它应该在我的代码中调用注销功能......谢谢

4

2 回答 2

1

使用调用此注销代码的服务器端按钮的clientclick,然后返回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>
于 2010-03-01T15:49:44.803 回答
1

Response.write 会将内容写入浏览器,当浏览器加载页面时,它会解析该数据(渲染 html 并执行 js)。如果浏览器通过 GET 或 POST(表单提交、链接、ajax)联系服务器,则不会向服务器(这是您的 asp.net webforms 代码运行的地方)提供进一步的通信或反馈。

发生的事情是您将输出定向到客户端,但随后立即调用 Response.Redirect,因此客户端永远不会获得您的输出。相反,它只是立即重定向,然后显示 default.aspx 页面。

您可以做的仍然是进行重定向,但将一些数据传递给客户端(查询字符串将是执行此操作的一种方式),然后 default.aspx 页面将知道查找该数据。如果找到该数据,它将完成任何必要的操作。在您的情况下,您希望它提醒用户。

一种方法是重定向到“~/Default.aspx?alert=1”。在 default.aspx 中,在页面加载时,它会查看查询字符串并查看警报键是否存在且值为 1。如果是这种情况,它将执行您的警报。

于 2010-03-01T18:33:00.483 回答