ASP.NET MVC - Аннотации данных - Зачем добавлять обязательный атрибут по умолчанию? - PullRequest
2 голосов
/ 25 января 2010

Может кто-нибудь объяснить, почему предполагается, что свойство типа, не допускающее обнуление, всегда должно иметь RequiredAttribue?

Я пытаюсь написать помощник по меткам, который автоматически добавит * или изменит класс css, чтобы я мог указать пользователю, что поле является обязательным. Однако при запросе метаданных необнуляемые свойства заканчиваются обязательным атрибутом.

MVC Исходный код:

protected override IEnumerable<ModelValidator> GetValidators(
    ModelMetadata metadata, ControllerContext context,
    IEnumerable<Attribute> attributes)
{
    _adaptersLock.EnterReadLock();

    try
    {
        List<ModelValidator> results = new List<ModelValidator>();

        if (metadata.IsRequired &&
            !attributes.Any(a => a is RequiredAttribute))
        {
            //******* Why Do this? 
            attributes = attributes.Concat(new[] { new RequiredAttribute() });
        }

        foreach (ValidationAttribute attribute in
            attributes.OfType<ValidationAttribute>())
        {
            DataAnnotationsModelValidationFactory factory;

            if (!_adapters.TryGetValue(attribute.GetType(), out factory))
                factory = _defaultFactory;

            results.Add(factory(metadata, context, attribute));
        }

        return results;
    }
    finally
    {
        _adaptersLock.ExitReadLock();
    }
}

1 Ответ

2 голосов
/ 25 января 2010

Лично я думаю, что это потому, что дизайнеры фреймворка упустили момент с обнуляемыми данными!

Может показаться, что они предположили, что если поле не имеет значения NULL, оно должно быть обязательным.

К сожалению, как вы, вероятно, обнаруживаете, это не всегда так.

Наиболее распространенный случай, о котором я могу подумать, - это текстовое поле, предоставленное пользователем, которое может быть пустым, но вы хотите оставить его пустым, пока пользователь не предоставит значение. В этом случае вы получаете три действительных случая: «Не установлено» (NULL), «Пусто» (не NULL) или фактическое значение.

Так что - чтобы ответить на ваш вопрос, нет - я не могу это объяснить. Возможно, это ошибка?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...