2013-02-01 107 views
0

我想动态获取公共字段,但它一直返回一个空列表。我加载一个usercontrol成功,但它是UserControl类型,这意味着我使用.BaseType来获得真正的类型。但是当我调用.GetFields()时,它会返回一个空的FieldInfo数组。Type.GetFields返回空数组

usercontrolPath = "/usercontrols/HelloWorldTestUC.ascx" 
Page pageHolder = new Page(); 
UserControl usercontrol = (UserControl)pageHolder.LoadControl("~/" + usercontrolPath); 
Type type = usercontrol.GetType().BaseType; 

FieldInfo[] infos = type.GetFields(BindingFlags.Public); 

//i will do something here 
control.Controls.Add(usercontrol); 

下面是用户控件代码:

public partial class HelloWorldTestUC : System.Web.UI.UserControl 
{ 
    public int Number = 0; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      txtMessage.Text = Message.ToString(); 
     } 
    } 
} 

任何想法,为什么它会返回一个空数组?它至少应该返回'Number'。

+0

whay你需要.BaseType吗? – TYY

+0

UserControl.BaseType会给我实际的类型 – Base33

回答

4

您的BindingFlags不完整。您可能想要BindingFlags.Public | BindingFlags.Instance获取公共实例字段。

+0

所以当实例没有通过时,它只是返回静态字段? – Base33