参考';这';在母版页中

本文关键字:母版页 参考 | 更新日期: 2023-09-27 18:24:03

我正在开发一个新的asp。NET项目(具体为.NET 4.5版)。我正试图使用最佳实践创建这个项目,但不幸的是,我不知道在这种情况下要查找的术语——希望这个问题能让它变得清楚。

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

这是我目前所拥有的——它运行良好,但不是"全球性的"。

在单个页面上:

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"上下文,这是有道理的,但我不知道替代方案是什么。

我这样做对吗?有更好的方法吗?如何使项目中每个页面的身份验证要求都是"全局的"?

参考';这';在母版页中

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

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

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