0

私のモデルには、次のように注釈が付けられた特定のフィールドがあります。

    [DataType(System.ComponentModel.DataAnnotations.DataType.Text)]
    [RegularExpression("[0-9]{1,10}", ErrorMessage = "The stated Attempt Id is invalid!")]
    public long? AttemptId { get; set; }

試行IDに誤ったデータを入力すると、モデル状態で次のエラーメッセージが表示されます。

The value 'cbcbxcb' is not valid for AttemptId.

同様のエラーメッセージが表示される他のフィールドがありますが、それらはlongではなくstring型ですか?無効な値が指定された場合、正しいエラーメッセージが表示されます。「長い」というメッセージが表示されないのはなぜですか。使用されています?ページ内の次のリテラルタグを使用してエラーを表示しています。

<%: Html.TValidationSummary() %>

編集:モデルの検証を次のように変更しようとしました:

    [Required(ErrorMessage="The stated Attempt Id is invalid!", AllowEmptyStrings=true)]

ただし、これはまだ正しくありません。まず、フィールドを空のままにしておく必要があります。そうすると、「指定された試行IDは無効です!」というメッセージが表示されます。エラーメッセージ。次に、フィールドに無効なデータを入力すると、以前の不正なエラーメッセージに戻ります。

4

3 に答える 3

1

おそらく、MVCバインディングは入力値を正しい型にキャストすることさえできないため、値が無効である必要があることをすでに認識しています。

于 2012-04-24T10:34:35.617 に答える
1

RegularExpression検証属性は、文字列型でのみ機能します。カスタムエラーメッセージを取得するには、代わりに必須の検証属性を使用して、独自のカスタムエラーメッセージをに入れます。

モデルパラメーターが必須でない場合は、コントローラー内で検証を実行し、ModelState.AddModelErrorメソッドを使用して独自のカスタムメッセージを追加できます。ただし、これはちょっとしたハックです。

于 2012-04-24T10:49:03.503 に答える
1

FluentValidationを使用する必要があります

属性を使用する組み込みの検証機能は、控えめに言っても、もろくて厄介です。

于 2012-04-24T11:34:22.780 に答える