从父页面检查子页面名称

本文关键字:检查 | 更新日期: 2023-09-27 18:35:24

我有一个继承自Page的PageContext类。我得到了几个继承自PageContext的子类。在PageContext中,我得到了一个属性"权限"。我需要根据打开的子页面设置"权限"属性。

这是我的页面上下文

 public class PageContext: Page
    {
        public string permission
        {
            get
            {
                 switch ( the open child page)
                 {
                     case 'A':
                           return 'Read';
                     default:
                          return 'Read';
                 }
            }
        }
    }

我可以在父类中实现这一点,还是必须在每个子页面中执行此操作?

从父页面检查子页面名称

我开发了与您的代码相同的代码来检查每个页面Page_Load的用户访问权限,如下所示:

所以我有一个基本的会员网页,如下所示:

 public abstract class MemberWebPage : System.Web.UI.Page
{
    public virtual bool AutorizeUser()
    {
        return false;
    }
    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
    }
}

所有继承的页面都应该实现基本方法(AutorizeUser),例如:

  public partial class UsersManagement :MemberWebPage
{
    public override bool AutorizeUser()
    {
        EnteredUser up = (EnteredUser)Session["UserProfile"];
        if (up == null)
            Response.Redirect("../LogIn.aspx");
        return up.HasAccess(PrimitiveActivity.UserManagement);
    } 
    protected void Page_Load(object sender, EventArgs e)
    { 
        if (!AutorizeUser())
            Response.Redirect("../Login.aspx");
    }
}

我的 HasAccess 方法将检查用户从数据库访问!

但是我仍然不太确定您的代码,无论如何您可以按照以下步骤操作(这可能是一个解决方案):

1-将"页面名称"定义为页面上下文中的虚拟字符串,它将返回空

2-每个派生类将覆盖页面名称

3-在PageContext中,"权限"属性将根据PageName返回

所以我们有:

 public class PageContext : Page
{ 
    public virtual string PageName
    {
        get
        {
            return null;
        } 
    }
    public string Permission
    {
        get
        {
            switch (PageName)
            {
                case "Page1":
                    return "Read";
                case "Page2":
                    return "Write";
                default:
                    return "None";
            }
        }
    }
}

派生类只是例如:

public class Page1 : PageContext
{
    public override string PageName
    {
        get
        {
            return "Page1";
        }
    }
}
public class Page2 : PageContext
{
    public override string PageName
    {
        get
        {
            return "Page2";
        }
    }
}
public class Page3 : PageContext
{ 
}

最后你可以使用这样的东西:

string p1Permission = (new Page1()).Permission;//Read
string p2Permission = (new Page2()).Permission;//Write
string p3Permission = (new Page3()).Permission;//None

希望会有所帮助。