-2

Entity Framework Code-First アプローチを使用してプロジェクトに取り組んでいます。コンテキスト クラス、サービス、リポジトリ、およびインターフェイス レイヤーがあります。特定のエンティティのサービス クラスで、検証とあらゆる種類のオブジェクト マッピングを維持できるようにしたいと考えています。ただし、キーと値のペアのリストをいじるのはあまり好きではなく、フォーム コレクション全体をサービスに渡すのは面倒だと感じています。また、モデルをビューから戻すと、数値プロパティの文字列エントリが 0 に変換され、適切な検証が停止します。フォームが送信されないようにするエンティティ検証があることはわかっていますが、バックエンドで検証を使用する場合は、「セキュリティ」のレイヤーが必要です。

私たちのグーグルフーは終わりに近づいています!私たちの力は役に立たない。

キーと値のペアのリストを使用したり、コレクション自体を渡したり、モデルをマッピングしたりせずに、フォーム コレクションからデータをコントローラーからサービス メソッドに渡す、適切でクリーンな方法があるかどうか知りたいです。

4

1 に答える 1

0

タイプ セーフなモデルを MVC 側に保持したい場合 (これは正しいことだと思います)、データをサービスに送信する前に、MVC の世界で最初の検証を行うことが最善の策だと思います。モデルが有効かどうかを確認し、次のような基本的なエラーをすべて取得できます。

var errors = ModelState.Values.SelectMany(v => v.Errors);

このコレクションに項目がある場合、モデル マッピングがどこで間違っていたかを示すエラーが含まれます。クライアントの検証が機能している場合、これは決して起こらないはずですが、クライアントの検証が無効になった場合に備えて、ここにまだあります。投稿から有効なモデルを生成できない場合は、それを Web サービスに送信することさえもったいないので、気にしないでください。これは、ユーザーが大失敗したため、完全な投稿検証に値しないことを意味します。そこで止めてください。

モデルが有効な場合 (そのコレクションにエラーがない場合、またはModelState.IsValid)、少なくとも投稿に適切なデータ型が含まれていることがわかり、実際のビジネス検証のためにモデルをサービスに送信できます。すべて適切に投稿されました。

于 2013-07-02T20:52:50.887 に答える