警报框问题

时间:2010-03-01 15:45:25

标签: c# .net messagebox alert

如何先显示警告框,然后注销

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功能我可以看到警报框但是当我拨打电话时,它没有向我显示警报框并且只是注销

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

2 个答案:

答案 0 :(得分:1)

使用客户端点击调用此注销码的服务器端按钮,然后返回true

e.g。

<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>

答案 1 :(得分:1)

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

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

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

这样做的一种方法是重定向到“〜/ Default.aspx?alert = 1”。在default.aspx中,在pageload上,它会查看查询字符串并查看是否存在值为1的警报键。如果是这种情况,则会执行警报。