如我有页面
OrderList.aspx
他下面有用户控件
Header.ascx现在程序结构为:public partial class User_OrderList : WebUserBase
public partial class UserControl_Header : System.Web.UI.UserControl问:1
我如何在OrderList.aspx.cs中取得他的父类名称
如:OrderList.aspx.cs的父类名称为WebUserBase问:2
我如何在Header.ascx.cs中取他的父类名称(这个应该和问题一差不多)问:3 这个是主要问题
我如何在Header.ascx中取他的所在页面的父类名称
如:现在我把Header.ascx放在OrderList.aspx中
    那么我如何在Header.ascx.cs中取得他的页面的父类名称
    也就是OrderList.aspx.cs的父类WebUserBasey谢谢

解决方案 »

  1.   

    无论当前页还是webUserControl都可以通过反射在当前类中得到基类 如下System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.BaseType.Name; //FullName得到全名如默认情况下在用户控件中得到的名称是 "System.Web.UI.UserControl"
    默认页面的得到基类名 "System.Web.UI.Page"从控件得到页面的基类通过反射应该也能 没试过
      

  2.   

    哦对了 可以变向得到啊 以参数的形式从web页传入到webusercontrol中
      

  3.   

    RE:哦对了 可以变向得到啊 以参数的形式从web页传入到webusercontrol中
    这种不行。。
    要在程序中取的谢谢
      

  4.   

    RE:System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.BaseType.Name
    这个可以得到当前的CS的基类也就是说可以实现我的 问题1 问题2但是我的问题3要怎么琮解决呢
    谢谢问:3 这个是主要问题
    我如何在Header.ascx中取他的所在页面的父类名称
    如:现在我把Header.ascx放在OrderList.aspx中
        那么我如何在Header.ascx.cs中取得他的页面的父类名称
        也就是OrderList.aspx.cs的父类WebUserBase 
      

  5.   


    我说的传参 是要在用户控件中声明一个public的属性 在引用它的页面的Page_load或重写OnInit方法中给控件对象中的该属性赋值 再进行你的下一步操作
    例public MyUserControl:System.Web.UI.UserControl
    {
      private string pageBaseClassName;
      public string PageBaseClassName
      {
        get{return pageBaseClassName;}
        set{pageBaseClassName=value;}
      }
      //其它操作
    }public a:System.Web.UI.Page
    {
      void Page_load(object Sender,EventArgs e)
      { 
        MyUserControl1.PageBaseClassName=System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.BaseType.Name;
      }
    }如果觉得这样不行 还是用反射(或Trace方法)吧 
      

  6.   

    如能不要进行传参,而在用户控件中就真接取到呢
    因为页面有很多,这样子传的话我要改很多页面如果在ascx中能直接取得的话就只要改这个用户控件就行了谢谢谢谢
      

  7.   

    前提条件是你的用户控件是直接放到页面而不是再放在其他用户控件中
    public partial class UserControl_Header : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write(this.NamingContainer.GetType().BaseType.BaseType.FullName);
        }
    }