C# 防止页面生命周期?

C# 防止页面生命周期?,c#,asp.net,page-lifecycle,C#,Asp.net,Page Lifecycle,我有一个母版页,上面有一个注销链接。当用户单击链接时,我调用以下方法: private void Logout() { SessionBll.DeleteSessionEntry(this.sessionId); FormsAuthentication.SignOut(); Roles.DeleteCookie(); LogHelper.Location = string.Empty; LogHel

我有一个母版页,上面有一个注销链接。当用户单击链接时,我调用以下方法:

    private void Logout()
    {
        SessionBll.DeleteSessionEntry(this.sessionId);
        FormsAuthentication.SignOut();
        Roles.DeleteCookie();
        LogHelper.Location = string.Empty;

        LogHelper.Info(logger, HttpContext.Current.User.Identity.Name, 
           MethodBase.GetCurrentMethod().Name, "User has been logged out from 
                Administrator.Master", LogMessage.LoggedOut);
        FormsAuthentication.RedirectToLoginPage();
    }
现在,当用户在页面上单击链接时,正常的页面循环就会发生,并调用此方法

问题是用户不必等待页面周期,他们应该尽快进入注销页面(只要在服务器上运行注销方法)

如何跳过页面生命周期,但仍然调用此方法


谢谢。

您不能跳过页面生命周期;您可以做的是:

注销
链接更改为正常链接(
),并在
登录
页面的
页面加载
,执行您发布的代码,但仅在(!IsPostBack)

编辑

如果您的登录页面需要知道(如您所说)何时执行清理代码;您可以在注销链接上传递参数,如下所示:

<a href="Login.aspx?Logout=y" > Logout </a>

这是超快速的。

你不能跳过页面生命周期;您可以做的是:

注销
链接更改为正常链接(
),并在
登录
页面的
页面加载
,执行您发布的代码,但仅在(!IsPostBack)

编辑

如果您的登录页面需要知道(如您所说)何时执行清理代码;您可以在注销链接上传递参数,如下所示:

<a href="Login.aspx?Logout=y" > Logout </a>

这非常快。

按照某人的建议使用没有生命周期的东西-ASP.NET MVC或创建一个.ashx(处理程序):
注销。ashx
只需注销登录的用户即可。这将在不改变框架的情况下发挥作用


不过,这并不常见,通常您会使用另一个页面,该页面仍然有完整的生命周期(根据Icarus的回答)。

使用一些没有生命周期的东西-如有人建议的ASP.NET MVC或创建一个.ashx(处理程序):
注销。ashx
只会注销登录的用户。这将在不改变框架的情况下发挥作用


但这并不常见,通常您会使用另一个页面,该页面仍有完整的生命周期(根据Icarus的回答)。

调用完全不同的页面,该页面只执行注销任务,而不执行其他相关代码。这样,您就不必担心页面生命周期。

调用完全不同的页面,只执行注销任务,而不执行其他相关代码。这样,您就不必担心页面生命周期

问题是用户不必等待页面周期

我认为问题在于页面显然在页面周期中做了太多的事情。在WebForms中,页面循环发生。这就是它的工作原理。考虑这个…

  • 为了与代码隐藏进行交互,客户端表单需要发布到页面
  • 为了处理帖子,页面需要存在于内存中
  • 为了生存,页面需要在其生命周期中完成其标准创建步骤
在没有看到任何实际代码的情况下,我的直觉反应是你在
页面加载上做得太多了。重构它。只执行加载页面所需的操作。不处理数据,不做各种后端工作,只需加载页面。这应该是一个相当轻松的过程。然后,在适当的地方逻辑地插入必要的背景工作。(在WebForms中,这是我最讨厌的一个问题,它常常以在一个条件中包装很多东西来检查
IsPostBack

现在,你可以做点什么。根据您的问题,听起来您想要跳过的是加载当前页面,而直接转到注销页面。根据您的设置,您有两种方法:

  • 使注销链接只不过是一个简单的链接。这样,浏览器将只请求注销页面,而不是向当前页面发布表单(比如按钮或
    LinkButton
  • 如果注销页面实际上需要向其发布某种值,请将操作设置为注销页面,使其成为自己的HTML
    form
    。这涉及到更少地依赖服务器端的拖放控件,而更多地依赖于制作一些简单的HTML(这在web开发中总是一件好事)
或者,再想想你的问题,你是在问如何让注销页面跳过母版页的周期?如果注销页面使用母版页,则不能跳过它。页面必须存在才能使用。但是您可以创建一个独立的注销页面,而不需要母版页,母版页只需处理注销(然后重定向到另一个页面)。这将快速处理注销,但总的来说仍然需要在某个地方加载页面。这让我们回到了一点,问题是加载页面花费的时间太长,而不是加载页面

问题是用户不必等待页面周期

我认为问题在于页面显然在页面周期中做了太多的事情。在WebForms中,页面循环发生。这就是它的工作原理。考虑这个…

  • 为了与代码隐藏进行交互,客户端表单需要发布到页面
  • 为了处理帖子,页面需要存在于内存中
  • 为了生存,页面需要在其生命周期中完成其标准创建步骤
在没有看到任何实际代码的情况下,我的直觉反应是你在
页面加载上做得太多了。重构它。只执行加载页面所需的操作。不处理数据,不做各种后端工作,只需加载页面。这应该是一个相当轻的过程