3

ASP.Net MVCアプリケーションを構築しており、受信データの検証ロジックをどこに配置すべきかを自問しています。

すでに簡単な検証が行われています。これらは、ビューモデルの属性[required], [numeric] , [email]などです(これも議論の余地があります)。

しかし、今ではさらにいくつかの入力検証があります。ドロップダウンリストから受け取ったIDが本物のIDであるかどうかを検証したいと思います。

たとえば、91をcountryidとして受け取った場合、91が有効なcountryidであり、ユーザーによってフォームに「ハッキングされた」値ではないことを確認する必要があります。有効な国IDでない場合、データレイヤーがエラーを生成するためです。

  1. リクエストからのデータが到着したときに、このメソッドは何が正しく何が間違っているかを知っているので、これをコントローラーアクションメソッドに配置する必要がありますか?

  2. VacancyValidator(オブジェクトはVacancyオブジェクト)に配置する必要があります。ここで、すべてのVacancy関連のビューモデルのすべての検証ロジックを配置します。

  3. 自分自身を検証する方法を知っているはずなので、ViewModelに配置する必要があります

  4. ViewModelsプロパティに配置するプロパティを検証する属性を作成する必要があります

  5. この特定のビューモデルのすべての検証ロジックを配置するVacancy[thisviewmodelsname]Validatorに配置する必要があります

どんなアイデアでもありがたい…。

4

3 に答える 3

2

すでに簡単な検証が行われています。これらは [required] 、 [numeric] 、 [email] などのビューモデルの属性です (これも議論の余地があります)。

ASP.NET MVC とうまく連携する Data Annotations の代わりに、FluentValidation.NETをお勧めします。これは、相互に依存するプロパティ間の複雑な検証ロジックを表現するための優れた構文を提供します。何百万行もの配管インフラストラクチャ コードを記述する必要はありません (これは、データ注釈を使用してカスタム バリデータを記述する場合に必要になることです) 。検証ロジックは非常に簡単です。

有効な countryid でない場合、データレイヤーでエラーが発生するためです。

ほら、データレイヤーがすでにこの検証を処理しています。ただし、データ レイヤーに到達するためにそのままにしたくない場合は、ビュー モデルでこのプロパティの検証ルールを設定できます。以前のアドバイスに従えばFluentValidation.NET、ビュー モデルの対応するバリデーターで、このルールを配置する場所が既にわかっているはずです。

于 2012-09-26T09:55:59.550 に答える
0

最良の方法は、クライアントとサーバーの検証を組み合わせることです。クライアント側の検証には、jquery validation pluginを使用できます。すべての標準的な検証パターン (maxlength、minlength、required など) を提供します。モデル属性 (データ注釈) または直接 html で検証要件を指定できます。また、検証結果がサーバー コードから返されるときに、カスタムリモート検証の可能性を提供します。

ただし、クライアント側の検証とサーバー側の検証を重複させる必要があります。たとえば、spring.net validationを使用します。汎用的で柔軟な最高のフレームワークだと思います。

于 2012-09-26T10:01:49.323 に答える