首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

关于反射的有关问题:Type.InvokeMember怎么获取在父类的属性

2012-02-07 
关于反射的问题:Type.InvokeMember如何获取在父类的属性我的页面有两个控件TextBox1DropDownList1我写了一

关于反射的问题:Type.InvokeMember如何获取在父类的属性
我的页面有两个控件  
TextBox1
DropDownList1

我写了一个函数返回对页面对象的特定属性值

object   GetMyValue(string   strControlServerID,string   strPropertyName)
{
        object   obj=this.FindControl(strControlServerID);
        Type   t=obj.GetType();
        return   t.InvokeMember   (   strPropertyName,BindingFlags.DeclaredOnly   |   BindingFlags.Public   |   BindingFlags.NonPublic|   BindingFlags.Instance   |   BindingFlags.GetProperty   |   BindingFlags.GetField|   BindingFlags.NonPublic
,   null   ,   obj   ,   null   );
}
调用的时候
GetMyValue( "TextBox1 ", "Text ");//成功,返回TextBox1.Text的值
GetMyValue( "DropDownList1 ", "SelectedValue ");//失败!提示DropDownList没有SelectedValue属性
我查了一下MSDN,发现   Text属性是   TextBox这个类的,而SelectedValue属性是   DropDownList类的父类(System.Web.UI.WebControls.ListControl)的属性,虽然我们在使用的时候用的是   DropDownList.SelectedIndex,但是通过   Type.InvokeMember却不能实现,请教各位,该如何解决这个问题呢


另外,我查了在VB中可以用CallByName来实现查找指定控件的指定属性值,在C#中却没有这个方法,我在VB中写了一个类来调用这个方法
        Public   Shared   Function   CallGetPropertyByName(ByVal   ObjectRef   As   Object,   ByVal   ProcName   As   String,   ByVal   ParamArray   Args   As   Object())   As   Object
                Return   CallByName(ObjectRef,   ProcName,   CallType.Get,   Args)
        End   Function


想在C#中使用,却出现这样的提示
Service   Unavailable


[解决办法]
找到办法了
如果只是属性的话,用下面的方法
object GetMyValue(string strControlServerID,string strPropertyName)
{
object obj=this.FindControl(strControlServerID);
Type t=obj.GetType();
return t.GetProperty ( strPropertyName ).GetValue ( obj,null);
}


[解决办法]
如果你加上BindingFlags .DeclaredOnly是有错误的..

BindingFlags .DeclaredOnly过滤掉了从父类继承来的属性和方法..

热点排行