gpt4 book ai didi

asp.net-mvc - 除了将 MetadataTypeAttribute 直接放在类上之外,有没有办法指示 ASP.NET MVC 有关某些类元数据的信息?

转载 作者:行者123 更新时间:2023-12-04 06:45:22 36 4
gpt4 key购买 nike

这是它现在如何工作的示例:

[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 类,则元数据在 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; }
}

最佳答案

我正在使用 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);
}
}

整洁的事情是 - 这允许以强类型的方式使用资源进行本地化。

使用它的缺点 - 捆绑了许多您可能不想使用的其他东西。

关于asp.net-mvc - 除了将 MetadataTypeAttribute 直接放在类上之外,有没有办法指示 ASP.NET MVC 有关某些类元数据的信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3811967/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com