1

MVCの経験が1年ほど経っても、私はまだ1つのことについて混乱しています。ModelState.IsValidでDataAnnotationsを効果的に使用するにはどうすればいいですか?単純なチュートリアルの例では、これはすべてうまく動作し、私はそれについての質問はありません。しかし、私は現在ログインしているユーザーに基づいてこれを提供するためのユーザではなく、ビジネスロジックをしたくないMVCモデルのバインディング/検証

今すぐフィールドAddedByUserがデータベースに必要とされる
Public Class Movie 

    Public Property MovieID As Integer 
    Public Property Title As String 
    Public Property Year As Integer 
    Public Property AddedByUser As String 

End Class 

:しかし、私は次のモデルを持っているはず。このシナリオでどのようにDataAnnotation属性を使用しますか?

Public Function SaveMovie(ByVal entity as Movie) As ActionResult 
    If ModelState.IsValid 
     // Save to DB here... 
    End If 
    Return View(entity) 
End Function 

...ビューバインディングにそのフィールドがないため、検証が失敗します。私はこれのための隠されたフィールドを持っているべきですか? SaveMovieアクションのカスタムビューモデルを作成する必要がありますか?私はビジネスロジックで私自身の検証を書くことができると思いますが、なぜモデルバリデーションを使うのですか?おそらくカスタムモデルバインダー?これらのタイプのシナリオを処理する最良の方法は何ですか?

挿入操作と更新操作と検証の違いについてもう少し具体的なシナリオを教えてください。更新操作では、オブジェクトの主キーが必要です。しかし、それはインサートの場合ではありません。この1つの重要な特性のために、挿入と更新のために別々のモデルを用意することになっていますか?

答えて

1

私はこれを処理する方法は、ユーザー入力型のものにDataAnnotationベースの検証を使用することです。電子メールアドレス、日付、必須フィールドなどの検証を行います。迅速な「健全性チェック」が必要で、ユーザーのエントリを2回確認する必要があります。

データベースコントロールまたはマイコードコントロール(プライマリキー)、[AddedByUser]プロパティはユーザーがこれらのプロパティに直接アクセスしないようにするため、DataAnnotationをフィールドに配置しないでください。これに関する検証チェックを追加してください。あなたのコードはこれらのプロパティを更新する唯一のものなので、なぜそれらを検証するのですか?

さらに 'ビジネスルール'タイプの検証では、すべてのプロパティレベルの検証が成功した後、MVCで実行されるモデルにIValidatableObjectを実装します。プロパティーレベルの検証が失敗した場合は実行されないことに注意してください。データが「汚れている」場合は、より複雑な検証などを実行したくないからです。

希望します。

関連する問題