2011-01-20 18 views
32

MVC3では、カスタム検証を追加する2つの新しいメカニズムがあります。これらは、(1)ValidationAttributeをサブクラス化するか、または(2)IValidatableObjectを実装することです。MVC3のIValidatableObject - クライアント側の検証

ValidationAttributeを使用すると、IClientValidatableを実装することによって比較的簡単にクライアント側の検証を追加できます(また、jQueryを使用して新しいアダプタとメソッドを登録します)。

IValidatableObjectは、再利用がオプションではない、一回限りの検証要件により適しています。それはまた、より単純なコードになります。したがって、いくつかのシナリオで私の選択となります。残念ながら、このメソッドを使用してクライアント側の検証を実装する簡単な方法はありません。

IValidatableObjectを使用しているときに私は何が不足していますか、どのようにJS検証を取得しますか?

答えて

23

私はここで(正当な)回答を得られなかったので、私はMicrosoftからの2人の人に尋ね、現在可能ではないことを確認しました。

ブラッド・ウィルソン:

このとき、唯一のプロパティレベルのバリデータがラインアップはるかに優れたブラウザの形式で入力 検証の考え方を持つような(クライアント側 検証を発することができます。..ブラウザの観点からは、 の "モデル"はありません)。

スチュアートネギは:

私はあなたが私が述べたように IValidatableObject

+0

これは、ビューにカスタムJavaScript検証をフックする簡単な方法がないことを意味しますか?私は、既存のクライアント側の検証メカニズムにプラグインできる簡単な機能を持っていたいと思います。 – pauloya

+0

[ASP.NETフォーラムの投稿](http://forums.asp.net/post/5593598.aspx):*現在jqueryの検証では、入力フィールド(モデルレベルの検証なし)のみが検証されるため、クラスの自然なマッピングはありませんレベル検証。モデルレベルの検証を追加する一般的な方法は、非表示のフィールドを追加し、モデルレベルの検証を非表示にすることです。* http://stackoverflow.com/a/5817958/11683は、この方法をデモンストレーションします。 。 – GSerg

+0

モデルの[リモート]属性を使用すると役立ちます。もっと読む: http://msdn.microsoft.com/en-us/library/gg508808%28VS.98%29.aspx – Tohid

4

http://weblogs.asp.net/scottgu/archive/2010/07/27/introducing-asp-net-mvc-3-preview-1.aspx http://blogs.msdn.com/b/stuartleeks/archive/2010/07/28/asp-net-mvc-adding-client-side-validation-to-validatepasswordlengthattribute-in-asp-モデル 他の検証の全てに加えて、(バインディングがすでにMVC 2でサポート それに接近したとき、ネット-MVC-3-プレビュー1.aspx

ASP.NET MVC 3は今 IValidateObjectインタフェースを称えます)、 はそれから検証エラーを取得し、 は自動的にフラグを立てる/強調表示します フィールドウィットヒントには、 HTMLフォームヘルパーが組み込まれています。

ASP.NET MVC 3はまた、 は、ASP.NET MVCは、バリデータがクライアント検証のための サポートしているかどうか 実行時に発見することを可能にする新しい IClientValidatableインタフェースを紹介します。この インターフェイスは がさまざまな 検証フレームワークと統合できるように設計されています。 MVC 3また は、 がどのようにしてModelMetadata 作成プロセスに貢献できるかを簡略化する新しいIMetadataAware インターフェイスを導入しました。

+2

これは、すべての検証にクライアント側の検証を追加することに関連している属性を持つクライアント検証をフックすることができます信じていません。私の質問では、非常にうまく動作します。私はIValidatableObjectにクライアント側の検証を追加することについて尋ねています。 –

0

このarticleには、ASP.NET MVCのクライアント側の検証でコンテナオブジェクトにアクセスする方法が記載されています。可能であれば、これを使用して独自のクライアント側の検証を開始することができます

+1

この場合も、これはデータアノテーションに関連し、MVC2固有のものです。旧バージョンのDataAnnotationsModelValidator よりも実装がはるかに簡単な、MVC3(IClientValidatable)の属性ベースの検証にクライアント側の検証を追加するためのメカニズムはまったく異なります。しかし、私は属性について話しているわけではありません、私は他のMVC3検証方法について話しています:IValidatableObject。 –

+0

@PaulHiles - こんにちはPaul、mvcでクライアント側の検証に適したものは見つかりましたか? –

関連する問題