Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 警报框问题_C#_.net_Messagebox_Alert - Fatal编程技术网

C# 警报框问题

C# 警报框问题,c#,.net,messagebox,alert,C#,.net,Messagebox,Alert,如何先显示alertbox,然后注销 if (machineID.Count != 0) { checkMachineGrpState(machineID); else { Response.Write("<script>alert('You are being logged out')</script>");

如何先显示alertbox,然后注销

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");
    }
if(machineID.Count!=0)
{
检查machinegrpstate(machineID);
其他的
{
响应。写入(“警报(‘您正在注销’)”);
GoSignOut();
}
}
私有无效GoSignout()
{
FormsAuthentication.SignOut();
会话。放弃();
Response.Redirect(“~/Default.aspx”);
}
在这里,如果我不调用GosignOut函数,我可以看到警报框,但当我调用signout时,它不会显示警报框,而是简单地注销


所以我在想,如果有一种方法可以让我先看到alertbox,然后当我按下OK时,它应该在我的代码中调用signout函数。。。谢谢

使用调用此注销代码的服务器端按钮的clientclick,然后返回true

e、 g


重新考虑你想要的。试试这个,我还没有测试过session.about和Signout的使用(这可能会迫使你进入登录页面)

if(machineID.Count!=0)
{
检查machinegrpstate(machineID);
其他的
{
GoSignOut();
Page.ClientScript.RegisterStartupScript(this.GetType(),“重定向”,“警报('您正在注销');window.location.href='”+ResolveUrl(“~/Default.aspx”)+“;”;
}
}
私有无效GoSignout()
{
FormsAuthentication.SignOut();
会话。放弃();
}
如果您需要允许重定向转到登录页面以外的页面(由于注销而被强制),您可以在web.config中添加如下内容。我不是100%确定您是否要允许此操作,因为它将不允许任何经过身份验证的用户访问该页面

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

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

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

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


一种方法是重定向到“~/Default.aspx?alert=1”。在default.aspx的pageload中,它将查看querystring并查看是否存在值为1的警报键。如果是这种情况,它将执行您的警报。

如何从我的代码隐藏中调用此警报。。。就像我的else条件啊,没有看到else,是什么触发了你显示的代码,是一个按钮点击吗?如果是这样,为什么他们不会被注销?不,这不是一个按钮点击,这是发生在页面加载。。这就是问题所在。。。警报消息上有一个按钮“OK”…嗯,不确定您是否可以这样做,您在呈现任何客户端脚本之前进行重定向,本质上,如果命中else子句,浏览器将永远看不到这一点,也许您可以改为重定向到已注销的页面?它已被弃用,而不是过时,但经过编辑以使用建议的调用,不确定是否值得否决,希望它能解决您的问题听起来您对整个客户机/服务器关系或ASP.NET webforms的工作方式没有把握。我真的建议您研究webforms是如何工作的,代码隐藏是如何在asp.net webforms页面生命周期中发挥作用的,以及其他类似的主题。在那之后,这种问题对你来说真的很容易。
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();
    }
<location path="whateverpage.aspx">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>