ホームページ > バックエンド開発 > C++ > ASP.NET MVCで複数のプロパティの合計の長さを検証する方法は?

ASP.NET MVCで複数のプロパティの合計の長さを検証する方法は?

DDD
リリース: 2025-01-16 19:37:11
オリジナル
821 人が閲覧しました

How to Validate Combined Length of Multiple Properties in ASP.NET MVC?

データ注釈を使用して ASP.NET MVC の複数属性の組み合わせの検証を実装する

ASP.NET MVC では、StringLength データ注釈を使用して、単一のプロパティの長さを簡単に検証できます。ただし、場合によっては、複数の文字列プロパティを組み合わせた長さを確認する必要がある場合があります。この記事では、カスタム データ アノテーションを使用してこれを実現するための推奨される MVC アプローチについて説明します。

スキーム: カスタム検証属性

結合された長さを検証するには、カスタム検証属性を作成します:

<code class="language-csharp">public class CombinedMinLengthAttribute : ValidationAttribute
{
    public CombinedMinLengthAttribute(int minLength, params string[] propertyNames)
    {
        this.PropertyNames = propertyNames;
        this.MinLength = minLength;
    }

    public string[] PropertyNames { get; private set; }
    public int MinLength { get; private set; }

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        var properties = this.PropertyNames.Select(validationContext.ObjectType.GetProperty);
        var values = properties.Select(p => p.GetValue(validationContext.ObjectInstance, null)).OfType<string>();
        var totalLength = values.Sum(x => x?.Length ?? 0) + (value?.ToString()?.Length ?? 0); //处理空值情况
        if (totalLength < this.MinLength)
        {
            return new ValidationResult(this.FormatErrorMessage(validationContext.DisplayName));
        }
        return ValidationResult.Success;
    }
}</code>
ログイン後にコピー

使用方法

ビュー モデルで、必要なプロパティをカスタム プロパティで装飾します。

<code class="language-csharp">public class MyViewModel
{
    [CombinedMinLength(20, "Bar", "Baz", ErrorMessage = "Foo、Bar和Baz属性的组合最小长度应大于20")]
    public string Foo { get; set; }
    public string Bar { get; set; }
    public string Baz { get; set; }
}</code>
ログイン後にコピー

この設定では、Foo、Bar、および Baz プロパティを組み合わせた長さが指定された最小長より小さい場合、モデルの検証は失敗し、プロパティで定義されたエラー メッセージが表示されます。 Null 属性値によって引き起こされる例外を回避するために、Null 値の処理がコードに追加されました。 エラー メッセージもローカライズされ、より使いやすくなりました。

以上がASP.NET MVCで複数のプロパティの合計の長さを検証する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート