我有以下UIHInt基于attibute:
[AttributeUsage(AttributeTargets.Property)]
public class DropDownListAttribute : UIHintAttribute, IMetadataAware
{
public DropDownListAttribute(string selectListName)
: base(KnownUiHints.DropDown, KnownPresentationLayers.Mvc, selectListName)
{
SelectListName = selectListName;
}
public string SelectListName { get; set; }
public void OnMetadataCreated(ModelMetadata metadata)
{
metadata.AdditionalValues[KnowMetadataKeys.SelectListName] = SelectListName;
}
}
它的目的是将SelectList分配给要从列表中选择的单个值视图模型属性,如下所示:
public class DemoModel: ViewModel
{
[Required]
[DropDownList("LanguageSelect")]
[Display(Name = "Language")]
public int? LanguageId { get; set; }
public SelectList LanguageSelect { get; set; }
}
我现在正在使用一些很棒的Golbergian机器和我自己的元数据提供程序,但是在发现IMetadataAware.OnMetadataCreated
后,我觉得我可以简化这一点。现在我将SelectListName
添加到元数据中,然后跳过一些箍到a)将SelectList转换为一种全局字典,以及b)在呈现下拉列表时从该字典中获取选择列表。
我想将SelectList本身添加到属性中的模型元数据中,即属性适用的属性的本地元数据,但是如何访问该属性或者它包含类型?
答案 0 :(得分:0)
访问Pocos上的属性的示例代码。 有一个或多个属性版本可供查看
示例调用方法
var MutliAttributeList = MyStatic.GetPocoMultiAttribute<MyAttribute>(typeof(poco),"AttrName");
public static UAttribute GetPocoAttribute<TPoco, UAttribute>(string attributeName) {
var result = typeof (TPoco).GetCustomAttributes(true)
.Where(attribute => attribute.GetType()
.Name == attributeName)
.Cast<UAttribute>()
.FirstOrDefault();
return result;
}
public static IEnumerable<UAttribute> GetPocoMultiAttribute<UAttribute>(Type pocoType, string attributeName) {
var result = pocoType.GetCustomAttributes(true)
.Where(attribute => attribute.GetType()
.Name == attributeName).Cast<UAttribute>().ToList();
return result;
}