【问题标题】:ASP.Net and GetType()ASP.Net 和 GetType()
【发布时间】:2008-10-14 17:26:29
【问题描述】:

我想获得一种我正在创建的“BasePage”对象。每个 Page 对象都基于 BasePage。例如,我有一个 Login.aspx,并且在我的代码隐藏中和一个具有方法 Display 的类:

Display(BasePage page) {
    ResourceManager manager = new ResourceManager(page.GetType());
}

在我的项目结构中,我有一个默认资源文件和一个伪翻译资源文件。如果我设置尝试这样的事情:

Display(BasePage page) {
    ResourceManager manager = new ResourceManager(typeof(Login));
}

它返回翻译后的页面。经过一番研究,我发现 page.GetType().ToString() 返回了一些“ASP_login.aspx”的效果我怎样才能得到类类型背后的实际代码,这样我就得到了一个“登录”类型的对象源自“BasePage”?

提前致谢!

【问题讨论】:

    标签: c# asp.net reflection resourcemanager


    【解决方案1】:

    如果您的代码旁边看起来像这样:

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

    然后您将使用 typeof(_Login) 为它获取 Type 对象。要动态获取类型,可以递归查找:

    Type GetCodeBehindType()
     { return getCodeBehindTypeRecursive(this.GetType());
     }
    
    Type getCodeBehindTypeRecursive(Type t)
     { var baseType = t.BaseType;
       if (baseType == typeof(BasePage)) return t;
       else return getCodeBehindTypeRecursive(baseType);
     }
    

    【讨论】:

      【解决方案2】:

      经过一些额外的研究,我发现如果我调用 Page.GetType().BaseType 它会返回 Aspx 页面的代码隐藏类型。

      【讨论】:

        【解决方案3】:

        page.GetType().BaseType,前面已经说过了,我来详细解释一下。

        Aspx 页面从其代码隐藏页面继承,这意味着继承层次结构如下所示:

        ...
        Page
        BasePage
        Login
        ASP_Login
        

        顶部是父级,底部是子级。

        这允许您从 aspx 页面访问您的代码,而无需将与您的实际 aspx 页面相关的所有生成代码复制到基类页面中。

        【讨论】:

          【解决方案4】:

          这取决于您从哪里调用 Display()。如果您从 ASPX 调用它,那么您将使用“ASP_login.aspx”。如果您从代码隐藏(即 Page_Load() 方法)调用它,您应该获得登录页面类型。

          如果我没记错的话,您可以考虑只使用 Page 属性(即 this.Page.GetType()),而不是传入 Page ,它应该始终是当前页面/代码隐藏类型。

          我还应该指出,您可能会考虑将这类东西从 ASPX/代码隐藏中移出并转移到某种服务中。尽量减少在代码中执行的操作数量通常是一个好主意,而是将逻辑推送到演示者类中并遵循 ASP.NET Web 窗体开发的 MVP 模式。

          【讨论】:

            猜你喜欢
            • 2010-12-06
            • 2010-10-19
            • 2011-06-24
            • 2011-07-20
            • 1970-01-01
            • 2012-04-29
            • 2012-10-29
            • 2014-03-07
            • 2013-10-28
            相关资源
            最近更新 更多