ASP.Net and GetType()

后端 未结 4 1938
花落未央
花落未央 2021-01-12 18:44

I want to get a type of a \"BasePage\" object that I am creating. Every Page object is based off BasePage. For instance, I have a Login.aspx and in my code-behind and a clas

相关标签:
4条回答
  • 2021-01-12 19:29

    It depends where you're calling Display() from. If you're calling it from the ASPX, then you'llse "ASP_login.aspx". If you're calling it from the code-behind (i.e. the Page_Load() method) you should get the Login page type.

    Instead of passing the Page in, you might consider just using the Page property (i.e. this.Page.GetType()) which should always be the current page/codebehind type, if I recall correctly.

    I should also make the point that you might consider moving this sort of stuff out of the ASPX/codebehind and into some sort of service. It's generally a good idea to minimize the amount of things you do in a code behind and, instead, push logic into a presenter class and follow the MVP pattern for ASP.NET Web Forms development.

    0 讨论(0)
  • 2021-01-12 19:36

    page.GetType().BaseType, it has been said before, but let me elaborate as to why.

    Aspx pages inherit from their code-behind pages, meaning that the inheritance hierarchy looks like this:

    ...
    Page
    BasePage
    Login
    ASP_Login
    

    Where the top is the parent and the bottom is the child.

    This allows your code behind to be accessible from the aspx page, without requiring all of the generated code related to your actual aspx page to be copied into the base class page.

    0 讨论(0)
  • 2021-01-12 19:37

    If your code-beside looks like this:

    public partial class _Login : BasePage 
     { /* ... */ 
     }
    

    Then you would get the Type object for it with typeof(_Login). To get the type dynamically, you can find it recursively:

    Type GetCodeBehindType()
     { return getCodeBehindTypeRecursive(this.GetType());
     }
    
    Type getCodeBehindTypeRecursive(Type t)
     { var baseType = t.BaseType;
       if (baseType == typeof(BasePage)) return t;
       else return getCodeBehindTypeRecursive(baseType);
     }
    
    0 讨论(0)
  • 2021-01-12 19:37

    After some additional research I found that if I call Page.GetType().BaseType it returns the code-behind type of the Aspx page.

    0 讨论(0)
提交回复
热议问题