如何先显示警告框,然后注销
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时它应该在我的代码中调用注销功能...谢谢
答案 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的警报键。如果是这种情况,则会执行警报。