ASP.Net and GetType()

半城伤御伤魂 提交于 2019-12-01 04:47:43

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);
 }

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

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.

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.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!