2012-04-24 8 views
0

私は次のように注釈されている特定のフィールドがあります。なぜMVC 3検証が私の上書きですか?私のモデルでは

:私はそれは私のモデル国家に次のエラーメッセージを与えている試みのIDで不正なデータを入力すると

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

The value 'cbcbxcb' is not valid for AttemptId. 

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

<%: Html.TValidationSummary() %> 

編集:私は、次のモデルで検証を変更しようとしています

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

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

答えて

1

RegularExpression検証属性は、文字列型でのみ機能します。カスタムエラーメッセージを取得するには、代わりにRequired validation属性を使用してください。

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

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

+0

答えをありがとう。今や、その特定のフィールドは本当に必須フィールドではないので、ユーザーはドットを空にしておく必要があります。あなたが「必須」としてバインドせずに提案していることをやり遂げる方法はありますか? –

+0

私は検証を '[Required(ErrorMessage = "指定された試行IDは無効です!"、AllowEmptyStrings = true)]'に変更し、空であればエラーメッセージを表示し、エラーメッセージが無効です。 –

+0

パラメータが必須でない場合、代替ソリューションを提供するように編集しました – DaveRead

1

おそらく、MVCバインディングは入力値を正しい型にキャストできないため、値が無効でなければならないことはすでに分かっています。

+0

これが発生したときに、MVCにメッセージを使用させる方法はありますか? –

+0

それを試していない、別のSOの質問からこのアプローチを試すことができます:http://stackoverflow.com/questions/9173034/override-datatype-mismatch-message-of-property-in-asp-net-mvcand-display -messag –

1

は脆く、厄介である - 控えめに言って。

+0

動作するものを使いたいと思っていますが、残念ながらこれは個人的なプロジェクトではなく、サードパーティのソフトウェアをシステムに導入することはオプションではありません。とにかくその提案に感謝します。 –

関連する問題