我々はそのモデルのデータ注釈に対してモデルを検証するために、次の手順を実行アクションにモデルを投稿:我々はマークするとASP.NETコア - MVCのカスタムモデルの検証
if (ModelState.IsValid)
プロパティを[必須]として設定すると、ModelState.IsValidは値を含むかどうかを検証します。
私の質問:カスタムバリデータを手動でビルドして実行するにはどうすればよいですか?
P.S.私はバックエンドのバリデータだけについて話しています。
我々はそのモデルのデータ注釈に対してモデルを検証するために、次の手順を実行アクションにモデルを投稿:我々はマークするとASP.NETコア - MVCのカスタムモデルの検証
if (ModelState.IsValid)
プロパティを[必須]として設定すると、ModelState.IsValidは値を含むかどうかを検証します。
私の質問:カスタムバリデータを手動でビルドして実行するにはどうすればよいですか?
P.S.私はバックエンドのバリデータだけについて話しています。
、あなたは単にValidationAttribute
から継承するクラスを作成することができます。詳細は、ASP.NET Core MVC Docsを参照してください。ここで
がドキュメントからまっすぐに取ら例です:
public class ClassicMovieAttribute : ValidationAttribute
{
private int _year;
public ClassicMovieAttribute(int Year)
{
_year = Year;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
Movie movie = (Movie)validationContext.ObjectInstance;
if (movie.Genre == Genre.Classic && movie.ReleaseDate.Year > _year)
{
return new ValidationResult(GetErrorMessage());
}
return ValidationResult.Success;
}
}
あなたの質問に要求されるように、私は、クライアント側の検証を除外する例を適応してきました。
(再び、ドキュメントから引用)この新しい属性を使用するには、該当するフィールドに追加する必要があります。
[ClassicMovie(1960)]
[DataType(DataType.Date)]
public DateTime ReleaseDate { get; set; }
は、ここで値がtrue
であることを確実にするための別の、シンプルな例です:
public class EnforceTrueAttribute : ValidationAttribute
{
public EnforceTrueAttribute()
: base("The {0} field must be true.") { }
public override bool IsValid(object value) =>
value is bool valueAsBool && valueAsBool;
}
これは、同じように適用されます。
[EnforceTrue]
public bool ThisShouldBeTrue { get; set; }
.Net Core
にカスタム検証属性を作成するには、から継承し、Validate
メソッドを実装する必要があります。 .NETのコアで
public class ValidUrlAttribute : Attribute, IModelValidator
{
public string ErrorMessage { get; set; }
IEnumerable<ModelValidationResult> Validate(ModelValidationContext context)
{
var url = context.Model as string;
if (url != null &&
Uri.IsWellFormedUriString(url, UriKind.Absolute))
{
return Enumerable.Empty<ModelValidationResult>();
}
return new List<ModelValidationResult>
{
new ModelValidationResult("", ErrorMessage)
};
}
}
public class Product
{
public int ProductId { get; set; }
[Required]
public string ProductName { get; set; }
[Required]
[ValidUrl]
public string ProductThumbnailUrl { get; set; }
}