2016-01-30 5 views
4

Я хочу использовать атрибут MetaDatatType в проекте MVC6, и он пока недоступен. Я использую 7.0.0-rc1-final, поэтому он должен быть последним.MetadataTypeAttribute недоступен в DNX Core 5.0

Кто-нибудь знает, находится ли он в другом собрании? Я получаю сообщение об ошибке, Тип или имя пространства имен MetadataType не удалось найти.

ответ

2

После некоторых поисковых запросов, похоже, этот атрибут недоступен в MVC 6. Вы можете использовать его в полном DNX, но он недоступен в DNX Core.

Конечно, вы можете украсить свой код с

#if DNXCORE50 
... 
#endif 

так, что вы не получите никаких ошибок при компиляции для полного DNX, но это выглядит как атрибут не делать то, что он, как ожидается. Например, DisplayName(Name = "...") не работает (я не проверял другие параметры, такие как Required и т. Д.).

IMHO, Fluent MetadataProvider может быть решением этого вопроса, только я не знаю, был ли он перенесен на vNext. Я свяжусь с автором (ами), и если они не смогут скоро его портировать, я его разблокирую и попытаюсь перенести его сам.

EDIT:ModelMetadataType заменяет MetadataType. Вы должны указать Microsoft.AspNet.Mvc.Core. Я не совсем уверен, но, возможно, вам понадобится Microsoft.AspNet.Mvc.DataAnnotations тоже.

В любом случае, мои мысли о специальных аннотациях данных (Fluent MetadataProvider) по-прежнему актуальны. Вам также может понадобиться прочитать интересную статью об этом: Why You Don't Need ModelMetadata.Attributes от Brad Wilson.

+0

Как ModelMetaDataType заменить MetaDataType? Один из них специфичен для MVC, а это не так? Они даже не в одном пространстве имен. –

+0

@Erik Philips: Вы правы - MetadataTypeAttribute находится в System.ComponentModel.DataAnnotations, а ModelMetadataTypeAttribute - в Microsoft.AspNet.Mvc. И что? Мы говорим о разных атрибутах, имеющих одинаковое влияние. Пожалуйста, внимательно прочитайте вопрос. И, да, второй заменяет первое, в отношении описания метаданных. Попробуйте то, что я описал, и вы увидите разницу. –

+0

Я думаю, это зависит от использования. Использует ли он его для поставщика метаданных или для проверки. –

0

Я столкнулся с той же проблемой. Я имею опыт работы с Asp.NET MVC 5, но я чувствую себя новичком с Asp.Net Core 1.0 (Full Framework 4.6.1). У меня есть библиотека классов для моделей (Framework 4.6.1), использующая ядро ​​dataaccess для telerik. Использование MetadataTypeAttribute для украшения класса модели с помощью класса приятелей было почти головной болью из-за того, что он не работал вообще !. Попытка почти что-то расстраивала. Так каково было решение для меня?

я должен был использовать ModelMetadataTypeAttribute вместо MetadataTypeAttribute из Microsoft.AspNetCore.Mvc.Core сборки. Отделка класса метаданных (класс друзей) следует той же методологии использования Display (...), DisplayName (...), то же самое для валидаторов. Независимо от того, находится ли класс друзей (класс метаданных) внешний или внутренний по отношению к классу модели.

Однако использование MetadataTypeAttribute непосредственно с классом модели вместо класса приятеля отлично работает!

Единственное объяснение, которое я могу дать об этом расхождении, связано с новой технологией ядра Microsoft Asp.Net, переносом процесса и функциональности DLL.

PD: Это не требуется Microsoft.AspNetCore.Mvc.DataAnnotations

Смежные вопросы