在母版页中引用 'this'

Reference 'this' in master page

我正在开发一个新的 asp.NET 项目(具体来说是 .NET 4.5 版)。我正在尝试使用最佳实践来创建这个项目,但不幸的是我不知道在这种情况下要查找的术语 - 希望这个问题能说明问题。

从默认模板创建新项目后,我获得了登录系统所需的页面。我现在想让整个网站都需要登录才能看到任何内容。为此,我只是检查您的用户是否在页面加载时登录,如果没有,则将您重定向到登录页面。

这是我目前所拥有的 - 它工作正常,但不是 "global"。

在个人页面上:

protected void Page_Load(object sender, EventArgs e)
{
    //If the user isn't logged in, make them log in
    redirectIfNotLoggedIn(this);
}

public static void redirectIfNotLoggedIn(_Default _Default)
{
    if (!_Default.User.Identity.IsAuthenticated) { _Default.Response.Redirect("~/Account/Login.aspx"); }
}

有效 - 如果我没有登录,它会将我带到 Login.aspx 页面。如果我登录了,我就可以浏览该站点。此代码的问题是我必须将其复制并粘贴到每个页面中。因此,我想将此代码放在 Site.Master 文件的 Page_Load 中,这将强制用户进行身份验证,无论他们试图访问哪个页面。但是,我不能在 Site.Master 中使用 'this' 上下文,这是有道理的 - 但我不知道替代方案是什么。

我这样做的方式正确吗?有没有更好的办法?如何为项目中的每个页面设置身份验证要求"global"?

在MasterPage中,您可以使用this.Page获取您要查找的页面对象。

但也可以考虑另一种方式: 我通常创建一个 class MyBasePage,继承自 System.Web.UI.Page,并将我的 Web 应用程序中所有页面共享的所有(或大部分)通用逻辑放在那里。

然后我创建每个页面,将基础 class 从 System.Web.UI.Page 修改为 MyBasePage