質問

MVC C# アプリ内でデータを検証する最良の方法を見つけようとしていますが、xVal が最適であると思われました。ただし、データ型の検証で問題が発生しています。

最初は、DTO に対して UpdateModel を実行し、DTO 上で検証を実行していました。これは必須フィールドなどにはうまく機能しましたが、たとえば文字列 (「asd」) を 10 進フィールドにマップしようとすると、UpdateModel は例外をスローします。検証するデータが存在する前に UpdateModel を実行する必要があるため、それを回避する方法がわかりませんでした。

私の解決策は、UpdateModel がコピーするフォームごとの DTO を作成し、それに対して検証を実行して、値を適切な DTO にコピーすることでした。フォーム DTO のすべての属性は文字列なので、UpdateModel が爆発することはなく、xVal を通じてデータ検証を強制します。ただし、required などのルールは有効になっていますが、DataType ルールを有効にすることができないようです (この場合は DataType.Currency を試しています)。

クライアント側の検証も機能させようとしましたが、サーバー側でデータ型の検証を行うきれいな方法があることを期待していました。

サーバー側でのデータ型の検証に関して他の人は何をしましたか?

役に立ちましたか?

解決

私は何をやってしまったこと形態を表すいくつかのDTOを作成しました。これらのDTOは中のRequest.Formを取ると自動的にフォーム値と同じ名前であることに基づいて、内部の特性(例:公共の文字列の電子メール、パブリック文字列FIRSTNAME)にすべてのフォームの値をマッピングします。

<のp>彼らはすべての文字列プロパティを持つことになり、私はXVALはそれらの属性置くところ。私は、入ってくるデータが有効であったことを確認(例:有効な日付、電子メール、番号など)を作るためにXVALや正規表現を使用すると思います。このように、それは常に文字列に行っていたので、日付や何かにそれを解析しようとしている。ネットとは対照的に、例外がスロー存在になることはありません。

このデータは常に私が欲しいの検証を実行し、私は有効なデータを持って知っていれば、の後、の日時などの適切な型に変換することができXVALにそれを作っていることを確認します。

他のヒント

サーバー側で文字列から他のデータ型に解析する必要があるデータを検証するために、ValidationAttribute から派生したカスタム バリデータを使用しています。例えば:

public class DateAttribute : ValidationAttribute
    {

        public override bool IsValid(object value)
        {
            var date = (string)value;
            DateTime result;
            return DateTime.TryParse(date, out result);
        }
    }

また、カスタム JavaScript コードを作成せずに、そのような検証属性をクライアント側とサーバー側の検証属性に変換する方法も見つけました。別の検証属性基本クラスから派生する必要があるだけです。私のものを見てください クライアント側の検証に関するブログ記事 これについてさらに詳しく知りたい場合は。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top