2

null 非許容型のプロパティには常に RequiredAttribue が必要であると想定される理由を誰でも説明できますか?

フィールドが必須であることをユーザーに示すことができるように、* を自動追加するか、css クラスを変更するラベル ヘルパーを作成しようとしています。ただし、メタデータのクエリを実行すると、null 不可のプロパティが必要な属性で終了します。

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();
    }
}
4

1 に答える 1

2

個人的には、フレームワークの設計者が null 許容データの要点を見逃しているためだと思います!

フィールドがnull可能でない場合、それは必須でなければならないと彼らは想定していたようです。

残念ながら、おそらくお気付きのように、これが常に当てはまるとは限りません。

私が考えることができるこれの最も一般的な例は、ユーザーによって提供された空白のテキストフィールドですが、ユーザーが値を提供するまで NULL のままにしておく必要があります。この場合、'Not Set' (NULL)、'Empty' (非 NULL)、または実際の値の 3 つの有効なケースが得られます。

だから - あなたの質問に答えるには、いいえ - 私はそれを説明することはできません. おそらくそれは間違いですか?

于 2010-01-25T19:08:34.760 に答える