MetadataTypeAttribute在DNX Core 5.0中不可用

时间:2016-01-30 23:55:26

标签: asp.net-mvc

我想在MVC6项目中使用MetaDatatType属性,但它似乎还没有。我使用的是7.0.0-rc1-final,所以它应该是最新的。

有谁知道它是否在另一个集会中? 我收到错误,找不到类型或命名空间名称MetadataType。

2 个答案:

答案 0 :(得分:2)

经过一些谷歌搜索后,似乎此属性在MVC 6中不可用。您可以在完整的DNX中使用它,但它在DNX Core中不可用。

当然,您可以使用

修饰代码
#if DNXCORE50
...
#endif

这样在编译完整的DNX时就不会出现错误,但看起来属性没有达到预期的效果。例如,DisplayName(Name = "...")不起作用(我没有检查其他选项,如Required等。)。

恕我直言,Fluent MetadataProvider可能是解决方案,只是我不知道它是否被移植到vNext。我打算联系作者,如果他们不能很快移植它,我会把它分叉,并试图自己移植它。

编辑: ModelMetadataType 取代 MetadataType 。您必须参考 Microsoft.AspNet.Mvc.Core 。我不太确定,但也许你需要 Microsoft.AspNet.Mvc.DataAnnotations

无论如何,我对Fluent Data Annotations(Fluent MetadataProvider)的看法仍然有效。您可能还需要阅读一篇有趣的文章:Brad Wilson Why You Don't Need ModelMetadata.Attributes

答案 1 :(得分:0)

我遇到了同样的问题。我对Asp.NET MVC 5很有经验,但我觉得Asp.Net Core 1.0(Full Framework 4.6.1)是新手。我有一个使用telerik dataaccess核心的模型类库(Framework 4.6.1)。使用MetadataTypeAttribute通过使用伙伴类来装饰模型类几乎是一个令人头痛的问题,因为它根本不起作用!尝试几乎任何事都令人沮丧。那么对我来说解决方案是什么?

我必须使用 ModelMetadataTypeAttribute 而不是 Microsoft.AspNetCore.Mvc.Core 程序集中的 MetadataTypeAttribute 。装饰元数据类(伙伴类)遵循使用Display(...),DisplayName(...)的相同方法,对于验证器也是如此。无论伙伴类(元数据类)是位于模型类的外部还是内部。

然而,将MetadataTypeAttribute直接与模型类而不是伙伴类一起使用,效果非常好!

我能解释的唯一解释是新出现的Microsoft Asp.Net核心技术,DLL过程和功能的重新定位。

PD:不需要Microsoft.AspNetCore.Mvc.DataAnnotations