从父页面检查子页面名称

时间:2014-12-28 13:39:40

标签: c# asp.net

我有一个继承自Page的PageContext类。我有几个继承自PageContext的子类。在PageContext中,我获得了一个属性" Permission"。我需要设置" Permission"基于打开的子页面的属性。

这是我的PageContext

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

                 }
            }

        }
    }

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

1 个答案:

答案 0 :(得分:1)

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

所以我有一个基本的MemberWebPage,如:

 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方法将检查来自DB的用户访问权限!

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

1-在P​​ageContext中将'PageName'定义为虚拟字符串,它将返回null

2-每个派生类都将覆盖PageName

3-在PageContext中,'Permission'属性将根据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

希望会有所帮助。