データ検証はモデル検証を強制しませんか?

asp.net-mvc controller model validation

私はこれらのチュートリアルに従いました:

http://www.asp.net/learn/mvc/tutorial-39-cs.aspx[]http://www.asp.net/learn/mvc/tutorial-39-cs.aspx http:// schotime。 net / blog / index.php / 2009/03/31 / linuxからsqlへのxx検証の統合/ [] http://schotime.net/blog/index.php/2009/03/31/ -xval-validation-with-linq-to-sql /の統合

LINQ-to-SQLで生成されたクラスに対してデータ注釈を使用してデータ検証を実施するため。 メタデータクラスは次のようになります。

[MetadataType(typeof(PositionValidation))]
公開部分クラスPosition {}

パブリッククラスPositionValidation {[必須]パブリック文字列Title {get;}セット; }}

検証は正しく機能しますが、これはコントローラーでこれを実行した場合に限られます。

if(ModelState.IsValid){_positions.AddPosition(newPosition); RedirectToAction( "List")を返します。 }

有効なModelStateのチェックを省略すると、Titleが空の場合でも、データベースに追加しようとします。 結果として、私は空白のタイトルのエントリーを得ます(これは編集にも当てはまります)。

コントローラ/ビューに加えて、データ検証によってモデル側にも適用されるという印象を受けました。 これは、Positionクラスで検証を行うために追加のコードを追加する必要があるということですか? もしそうなら、これはDRYに違反していませんか?

  2  1


ベストアンサー

したがって、言い換えれば(私が間違っているかどうかをお知らせください)、データ注釈検証が失敗した場合、あなたのアクションはまったく実行されないと予想されます。 これがif(Model.IsValid)ステートメントを省略する唯一の方法でした。

あなたの仮定は正しくありません、そしてこれは仕様によるものです。 これは実にとても良い機能であり、迷惑ではありません。 エラーがあるかどうかを確認するために1行のコードだけを追加し、その見返りに次のことが可能になります。

  • ビジネスロジックに由来するあなた自身のエラーを追加してください。そうすれば、DAが問題ないときには、次の送信時にではなく、即座にユーザーに表示されます

  • エラーのリセットまたはエラーのカスタマイズ

  • 他のビューにリダイレクトするか、何らかのアクションを実行します(例: 特定の条件で)

0


タイトルとURLをコピーしました