Информация, которую вы ищете, находится в ViewData.ModelMetadata
. В серии постов Брэда Уилсона, посвященной шаблонам , должно быть объяснено все это, особенно статья ModelMetadata .
.
Что касается других атрибутов ValidationAttributes, вы можете получить к ним доступ с помощью метода ModelMetadata.GetValidators()
.
ModelMetadata.IsRequired
скажет вам, если сложный тип (или тип значения, заключенный в Nullable<T>
) требуется для RequiredAttribute
, но он даст вам ложные срабатывания для типов значений, которые не могут быть обнуляемыми (потому что они неявно требуется). Вы можете обойти это с помощью следующего:
bool isReallyRequired = metadata.IsRequired
&& (!metadata.ModelType.IsValueType || metadata.IsNullableValueType);
Примечание: вам нужно использовать !metadata.ModelType.IsValueType
вместо model.IsComplexType
, потому что ModelMetadata.IsComplexType
возвращает false, поскольку MVC не считается сложным типом, включающим строки.