0

MVC 3 razor には、次の 2 つのオプションがあるようです。

検証の概要でさまざまなプロパティのすべてのエラーを表示します

@Html.ValidationSummary(false)

または、プロパティ自体の横にエラーを表示します

@Html.ValidationSummary(true)

しかし、一部のプロパティのみが検証の概要にエラーを表示するようにしたいと思います (Validate のオーバーライドから返されたエラー メッセージなど)。

    public IEnumerable<ValidationResult> Validate(ValidationContext context)
    {
        if (string.IsNullOrWhiteSpace(HomePhoneNumber) && string.IsNullOrWhiteSpace(WorkPhoneNumber) && string.IsNullOrWhiteSpace(MobileNumber) && string.IsNullOrWhiteSpace(FaxNumber))
        {
            yield return new ValidationResult("Please fill in at least one of the phone fields with a phone number");
        }
    }

モデルで定義されているように、エラーメッセージを横に表示するためのその他のより単純な検証。

 [Required(ErrorMessage = "Please fill in your full name")]

これは可能ですか?

4

1 に答える 1

0

可能です。 ValidationSummary()ModelErrors forstring.emptyをキーとして表示します。サンプルコードは次のとおりです。

IList<ValidationResult> validationResults = Validate();

if (validationResults != null) {
    foreach (var validationResult in validationResults) {
        ModelState.AddModelError(String.Empty, validationResult.ErrorMessage);
    }
}

ビューで:

@Html.ValidationSummary(true)

編集:

上記は、ValidationSummery ヘルパーが非プロパティ (オブジェクト) レベルのメッセージを処理する方法のサンプル例です。

ただし、コードは期待どおりに動作するはずですIEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)。オブジェクトのプロパティにエラーがない場合、検証インターフェイス メソッドがトリガーされることを考慮してください。検証チェックのデフォルトのシーケンスは次のとおりです。

  • プロパティ属性
  • クラス属性
  • インターフェイスを検証する

ステップのいずれかが失敗した場合、それ以上のチェックなしですぐに戻ります。目立たないクライアント検証が有効になっている場合、属性ベースの検証はクライアント側で起動する必要があります。次に、モデル バインド中に検証インターフェイスが起動します。

于 2012-04-11T20:08:25.100 に答える