【问题标题】:Way to call a method when navigating away from a page in C# (.Net 3.5)?离开 C# (.Net 3.5) 中的页面时调用方法的方法?
【发布时间】:2011-04-18 09:33:09
【问题描述】:

我正在做一个项目,一旦用户被引导到某个页面,他们就会收到一定级别的“身份验证”,如果用户之前尝试离开该页面,我想删除这个“身份验证”他们填写了一份表格。

我想知道当重定向离开适合 Page 事件生命周期的特定页面(或者如果您有建议,则使用不同的页面)时,这是否是一种获取方法调用的方法?

我对 C# 和 .Net 框架有点陌生,所以如果这不是标准的,那么请告诉我什么是正确的方法。

谢谢!

【问题讨论】:

    标签: c# .net asp.net .net-3.5


    【解决方案1】:

    您可以尝试使用由 JavaScript 事件触发的 PageMethod。这需要 aspx 中的 ScriptManager。

    示例: JavaScript

    function LeavePage(e) {
        PageMethods.RevokeAuthentication();
    }
    
    window.onbeforeunload = LeavePage;
    

    背后的C#代码

    [PageMethod]
    public static void RevokeAuthentication()
    {
        // Do stuff here
    }
    

    但是,这种方法并非万无一失。如果客户端的浏览器禁用了脚本,则 JavaScript 将不会运行。

    也许更好的方法是在 MasterPage 中使用 Session 处理身份验证。 MasterPage 类似于 PHP 开发人员使用包含的方式。

    例如OnLoad 检查页面,如果 pageName 允许更高的身份验证,则设置它,否则撤销它。

    【讨论】:

    【解决方案2】:

    您的页面不会知道它正在被导航离开,因为它实际上是无状态的。一旦页面由 C# 生成,它就会被传输到浏览器。该页面不在 C# 中“存在”。一旦生成,就是这样。

    您可以使用会话变量来跟踪用户的“身份验证”级别。如果他们点击其他页面,您可以检查此变量的值并采取相应措施。如果他们填写了表格,您将在会话中记录该事实。

    另一种选择是在用户离开页面时使用 javascript 回调到服务器。这不会在 Page 事件生命周期内起作用,因为它已经完成了

    这种“身份验证”是否存在很长时间?需要坚持吗?

    【讨论】:

    • 如果用户填写表单,则整个会话(或直到注销)都存在“身份验证”。我确实意识到无国籍状态,因此我认为这不一定有效。我不确定是否可以制作任何自定义事件来处理这个问题(当我谈论导航时,我严格指的是在站点内导航,而不是到外部域/站点)。也许我应该重组这个过程?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多