9

私はこのように CustomValidationAttribute を使用しています

[CustomValidation(typeof(MyValidator),"Validate",ErrorMessage = "Foo")]

そして私のバリデータにはこのコードが含まれています

public class MyValidator {
    public static ValidationResult Validate(TestProperty testProperty, ValidationContext validationContext) {
        if (string.IsNullOrEmpty(testProperty.Name)) {
            return new ValidationResult(""); <-- how can I get the error message  from the custom validation attribute? 
        }
        return ValidationResult.Success;
    }
}

では、カスタム検証属性からエラー メッセージを取得するにはどうすればよいでしょうか。

4

4 に答える 4

8

これは少し古い投稿であることは承知していますが、質問に対するより良い回答を提供します。

CustomValidationAttribute質問者は を使用し、プロパティを使用してエラー メッセージを渡したいと考えていErrorMessageます。

プロパティを装飾するときに指定したエラー メッセージを静的メソッドで使用する場合は、次のいずれかを返します。

new ValidationResult(string.Empty)またはValidationResult("")またはValidationResult(null).

はその基本クラスのをCustomValidationAttributeオーバーライドFormatErrorMessageし、 の条件付きチェックを行いstring.IsNullOrEmptyます。

于 2014-10-22T14:43:25.247 に答える
7

属性からエラー メッセージを取得する確実な方法はありません。別の方法として、カスタム検証属性を書くこともできます:

[MyValidator(ErrorMessage = "Foo")]
public TestProperty SomeProperty { get; set; }

このような:

public class MyValidatorAttribute : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        var testProperty = (TestProperty)value;
        if (testProperty == null || string.IsNullOrEmpty(testProperty.Name))
        {
            return new ValidationResult(FormatErrorMessage(validationContext.DisplayName));
        }

        return null;
    }
}

この場合、エラー メッセージはカスタム検証属性から推測されます。

于 2012-09-23T13:39:26.767 に答える
0

次の投稿を調べて、やりたいことを実行する方法についていくつかのアイデアを得ることができます (JS を使用しています)。

JavaScriptによるカスタムバリデータエラーテキスト?

お役に立てれば。

于 2012-09-23T13:37:09.970 に答える
0

私が見つけた唯一の方法は、TryValidateObject を使用してポストバック メソッドからモデルを検証し、失敗した場合はモデルを再度表示することです。その後、エラーが表示されます。

    [HttpPost]
    public ActionResult Standard(Standard model)
    {
        var valContext = new ValidationContext(model, null, null);
        var valResults = new List<ValidationResult>();;
        bool b = Validator.TryValidateObject(model, valContext, valResults, true);
        if(!b)
            return View(model);
        ...
于 2013-10-10T21:10:12.393 に答える