以下是现在如何运作的示例:
[MetadataType(typeof(PersonMetadata))]
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
public class PersonMetadata
{
[Required]
public string Name { get; set; }
[Range(0,150]
public int Age { get; set; }
}
但是我不希望将MetadataAttribute放在Person类上,而是想要一些告诉MVC框架的方法“嘿,如果遇到Person类,metadate在PersonMetadata类中”。
这只是颠倒了我感觉更具成分性并遵循开放式原则的方向,因为我不需要触及Person类来用元数据“扩展”它。
我知道这会产生一个可能存在多个和冲突的元数据的问题,这也增加了复杂性,但灵活性总是需要付出代价。
我想要一种编程方式或声明方式,或者最好两种方式:)
所以可能是这样的:
MetadataTypeMappings.Add(typeof(Person), typeof(PersonMetadata));
另一个可能是:
[MetadataFor(typeof(Person)]
public class PersonMetadata
{
[Required]
public string Name { get; set; }
[Range(0,150]
public int Age { get; set; }
}
答案 0 :(得分:3)
我正在使用MvcExtensions。其中一个功能是描述这样的元数据的好方法:
public class ProductEditModelConfiguration :
ModelMetadataConfiguration<ProductEditModel>
{
public ProductEditModelConfiguration()
{
Configure(model => model.Id).Hide();
Configure(model => model.Name)
.DisplayName(() => LocalizedTexts.Name)
.Required(() => LocalizedTexts.NameCannotBeBlank)
.MaximumLength(64, () =>
LocalizedTexts.NameCannotBeMoreThanSixtyFourCharacters);
}
}
整洁的事情是 - 这允许以强类型的方式使用资源进行本地化。
使用它的缺点 - 捆绑了许多你可能不想使用的东西。