在母版页中引用 '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
我正在开发一个新的 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