問題タブ [validationattribute]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - カスタム ValidationAttribute と INotifyDataErrorInfo を使用して、別のプロパティが検証されたときに、あるプロパティで検証をトリガーする方法
最近まで、私はIDataErrorInfo
インターフェースのカスタム拡張バージョンを使用していました。私の拡張機能を使用すると、複数のエラーを同時に処理できます。これまでのところ、非常にうまく機能しています。しかし、INotifyDataErrorInfo
インターフェースが導入されたので、何か改善点があるかどうか試してみようと思いました。
いくつかのオンライン チュートリアルに従った後ValidationAttribute
、System.ComponentModel.DataAnnotations namespace
. これらAttribute
の を使用すると、次のような基本的な検証ルールを提供できます。
Valaidation.Errors
エラーメッセージは、適用された s で利用可能なコレクションに直接プラグインされるため、最初はかなり良いように見えましたErrorTemplate
。ただし、組み込みの検証ルールのほとんどは本当に基本的なものであり、他のプロパティ値を含む複雑な検証ルールを実装する必要があることに慣れています。
そこで、複数のプロパティを含む単純な検証ルールを作成する方法を見つけようと試みました。これは、2 つ以上のフィールドのいずれかを設定する必要があるというルールです。そこで、 を拡張するクラスを宣言し、ValidationAttribute
オンラインで検索した後、他のプロパティ値にアクセスする方法を見つけました。
各 にカスタムErrorTemplate
を適用して基本的な UI を作成し、データ バインド プロパティTextBox
のコレクションを表示しました。Validation.Errors
プロパティのカスタムAttribute
セットを使用して、どちらのプロパティも設定されていないときにインターフェイスを介してコレクションName
に を追加することができましたが、ここに問題があります。他の必要なプロパティにバインドされた他の es データのいずれかに値を追加した場合、最初のエラーメッセージはそこに残ります。ValidationResult
Validation.Errors
TextBox
TextBox
最初に戻ってTextBox
何かを入力すると、検証が機能するため、値を削除しても、必要なプロパティの 1 つが設定されていることがわかりました。したがって、検証コードは機能しますが、問題は、他の必要なプロパティへのプロパティの変更がプロパティの検証をトリガーしないことName
です。
同じカスタムAttribute
を他の必須プロパティに適用した場合でも、同じことが起こりました...各検証エラーは、関連するTextBox
. CustomValidationAttribute
クラス内のメソッドを呼び出して検証できるようにする組み込みも試しましたが、最終結果は同じでした。
検証コードは機能しますが、他の必要なプロパティの変更によってトリガーされません。他のプロパティの名前を渡してメソッドを呼び出してみValidate
ましたが、それは連続ループで終了しました。問題は、別のプロパティが検証されたときに、あるプロパティで検証をトリガーするにはどうすればよいかということです。
c# - C# MVC 内での列挙値の検証。部分的な検証が発生する - 検証動作を変更するには?
カミソリ ビュー内の列挙型を非表示フィールドとして表現してきました。これは、アクションの結果にポストされます。
HTML 内で提供された文字列値をバインドすると、列挙型の値が自動的に検証されることに気付きました。
かみそり:
レンダリングされた HTML:
DOM 内の値を間違った値に変更してフォームを送信すると、ModelState.IsValid
返さfalse
れ、次のエラーが ModelState に追加されます。
[Required]
それはすべてグレービーですが、ビューモデルを作成した場合、ビューモデルに属性などの検証ルールを明示的に設定する必要があると思いました。
また、これ専用の と呼ばれる検証属性もありますEnumDataType
。
質問
バインディング時に検証が自動的に行われる場合、EnumDataType
データ検証属性のポイントは何ですか?
c# - C# カスタム属性が必要な場合
カスタム属性を始めたばかりで、とても気に入っています。プロパティに適用され、同じオブジェクト内の別のプロパティの名前を示す属性を作成できるかどうか疑問に思っています。参照されたプロパティに値があるかどうかを確認し、値がある場合は、装飾された属性が必要になります。このようなもの:
したがって、承認者プロパティは、プロパティを参照して null をチェックする RequiredIfNotNull 属性で修飾されます。この場合、承認日。ApprovedDate に値がある場合は、ApprovedBy プロパティを必須にする必要があります。このようなことは可能ですか?もしそうなら、サーバー側とクライアント側を実装できますか?
c# - エディター テンプレートを使用し、ValidationAttribute である DataTypeAttribute を作成します。
MVC5 と .NET 4.5 の使用
Editor Template を使用し、ValidationAttribute として機能する DataTypeAttribute を作成したいと考えています。
私が理解しているように、DataTypeAttribute は ValidationAttribute を継承しているので、これが難しいとは思いませんでした。
ただし、検証することはできません。
これが私の属性です:
これが私のViewModelのプロパティです:
XXXAttribute の IsValid メソッドのデバッガーは、送信時にチェックされていないことを示しています。
誰かが私が間違ったことを指摘できますか? ありがとうございました。
c# - 電話番号検証 MVC
正規表現を使用して電話番号を検証し、無効な番号または電話番号が送信されたときにエラーを返そうとしています。
MVC コード:
C# コード:
ただし、入力ボックスには、送信された電話番号が無効であることを示すメッセージがユーザーに表示されません。
asp.net-mvc-5 - クライアント側での私の検証属性
ページのビジネス ルールがあります。日付を含むコントロールは昇順である必要があります。つまり、Date1 に入力された値 < Date2 に入力された値 < Date3
私の属性:
クライアント側:
モデル:
とビュー(必要な部分):
また、結果 HTML の一部:
しかし、Date1='11/11/2010' と Date2='11/11/2009' を入力すると、デバッガーは、datecomparer メソッドが false を返しますが、バリデータ メッセージは表示されません。なぜ、どのように解決するのですか?