结果

A)预订I’从中学习说如果我们处理 Login.Authenticate 事件,那么我们必须自己对用户进行身份验证。因此,控制赢得了自动验证用户名和密码。我认为本书建议只有在我们覆盖 Login.OnAuthenticate()方法时才会发生这种情况,但即使只为 Authenticate 事件添加事件处理程序,也会出现自动身份验证没有发生。

但为什么呢?为什么事件处理不像 Init Load 事件那样工作,你必须覆盖 Page.OnInit() Page.OnLoad()以获得对事件处理的控制权?

结果

B)我检查了MSDN网站,它基本上建议如果我们覆盖 Login.OnAuthenticate(),我们也应该调用 base.OnAuthenticate()。但是,为什么我们需要覆盖 Login.OnAuthenticate(),如果我们通过简单地为 Login.Authenticate 声明一个事件处理程序来获得相同的效果?

结果

感谢名单

有帮助吗?

解决方案

您不应该覆盖 <代码> OnAuthenticate 。此方法仅在内部用于引发 MembershipProvider 进行身份验证,则“> 验证 事件给已注册的处理程序。因此,要为 Login 控件实现自定义身份验证,只需为 Authenticate 事件注册一个处理程序,并设置 AuthenticateEventArgs.Authenticated property。

Authenticate 事件的事件处理与其他事件完全相同。唯一的区别是 OnAuthenticate 方法有一些逻辑决定是否使用 MembershipProvider 或注册的事件处理程序进行身份验证。

如果你确实创建了 Login 的子类并覆盖 Login.OnAuthenticate ,那么调用 base.OnAuthenticate(...)因为它包含调用已注册事件处理程序的逻辑。如果您不调用 base.Authenticate(...),则应自行调用已注册的事件处理程序。但是在您的情况下可能不需要创建 Login 的子类。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top