Вы, вероятно, должны использовать «класс приятеля» для своего модельного класса для хранения атрибутов проверки:
// Note the partial keyword below: the full definition of MyModel
// can be put in a file in the model
[MetadataType(typeof(MyModelMetadata))]
public partial class MyModel {}
public class MyModelMetadata
{
//properties with validation attributes (dataannotations) go here...
}
Атрибуты проверки - это один элемент, который не разделен между задачами MVC:
Они относятся как к проверке клиента в представлениях, так и к проверке сервера в домене, в точке, где данные хранятся в базе данных и, следовательно, нуждаются в проверке.
Таким образом, @jfar, говоря, что они должны войти в ViewModel, так же неправ, как и человек, который говорит, что они должны быть в домене.
На самом деле, ИМХО, совершенно неправильно помещать атрибуты проверки в ViewModel. ViewModel должен быть контейнером для данных, отправляемых в View. Он не должен портировать какую-либо собственную логику. Эта логика, в данном случае атрибуты валидации, должна быть определена вне ViewModel, и для этого лучше всего подойдет класс buddy, особенно если вы используете автоматический ORM, но не только в этом особом случае.
Этот вопрос является иллюстрацией того факта, что не все проблемы точно соотносятся с MVC, поэтому получить все сталинские сведения о том, куда должны идти атрибуты проверки, просто неправильно.
Мой совет: поместите их в одно место, отдельно от всех других проблем. Для этого нужно использовать классы друзей.