问题描述
我正在编写一个应用程序,我在其中获取这样的数据(字符串“ SettingsSubPage”代表数据模型的名称,在这种情况下为“ User”):
[Parameter]
public string SettingsSubPage { get; set; }
Results = ApiProvider.GetAll(System.Type.GetType(SettingsSubPage));
我想从此数据中显示除“ UserRoles”以外的所有属性,因此我创建了一个使其能够隐藏数据的属性:
属性:
public class HideInTableAttribute : Attribute
{
}
Modal(User)类:
public class User
{
public int Id { get; set; }
[required(ErrorMessage = "Email is required")]
[DataType(DataType.EmailAddress)]
[EmailAddress(ErrorMessage = "This is not a valid email adress")]
public string Email { get; set; }
[required(ErrorMessage = "Password is required")]
[DataType(DataType.Password)]
[StringLength(50,MinimumLength = 5,ErrorMessage = "Password must be between 5 and 50 characters")]
public string Password { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public bool Enabled { get; set; }
public DateTime LastLogin { get; set; }
*/ HERE WE HIDE THE PROPERTY /*
[HideInTable]
public List<UserRole> UserRoles { get; set; }
}
现在,我想获取除“ UserRoles”之外的这些属性的列表,并将它们设置为GridColumns,以便获得GridColumns的列表。一个如何使它们成为GridColumns(用于其他类)的示例可以像这样完成:
.Select(x => new GridColumn()
{
Field = x.Name,HeaderText = x.Name,TextAlign = TextAlign.Center
})
.ToList();
因此,我需要一个LINQ查询,该查询获取“ SettingsSubpage”模型的属性并将其转换为GridColumns并将它们放入列表中,到目前为止,我一直在尝试以下方法:
List<System.Reflection.PropertyInfo> list = System.Type.GetType(SettingsSubPage).GetProperties().Where(x => x.GetCustomAttributes(true).OfType<HideInTableAttribute>().Any()).ToList();
但是这给了我这个错误:
希望有人可以提供帮助,谢谢!
解决方法
您可以尝试一次:
var propsList = typeof(T).GetProperties(BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance)
.Where(x => !Attribute.IsDefined(x,typeof(HideInTableAttribute)))
.ToList();
,这里T是班级名称
如果您的类型在另一个Assembly中,则需要在GetType的typeName参数中提供AssemblyQualifiedName。
例如。
var mytype= Type.GetType("DnetAdminDashboard.DesktopNavigation.NavigationMenu,DnetAdminDashboard,Version=1.3.13.0,Culture=neutral,PublicKeyToken=null",true);
NavigationMenu是类
如果您不知道AssemblyQualifiedName,请参阅如何获取它。
还可以加载Assembly,然后获取类型。
DnetAdminDashboard是程序集
var assm = Assembly.Load("DnetAdminDashboard");
var myType = assm.GetTypes().FirstOrDefault(p => p.Name == "NavigationMenu");