2012-02-16 3 views
17

KnockoutJS、KnockoutJSマッピングプラグイン、jQuery 1.7.1を使用してASP.NET MVC 2を使用してページを構築しました。 KnockoutJS Validationプラグイン(here)も使用できるようにしたいと思います。しかし、私は両方のサーバーとクライアント側の検証が起こっている必要があります。ビューモデルをKnockoutJSバリデーションにマップ

私のビューモデルを.extend()メソッドを使用するKnockoutJS Validation pluginにマップすることは可能ですか?

EDIT:例。検証プラグインは、あなたが検証したい観測を拡張するように動作します

var viewmodel = { 
    firstname: ko.observable().extend({ required: true }); 
} 
+0

C#モデルでData Annotationを使用していて、EditorForを使用してクライアント側の検証ルールを設定していますか?あまりにも多くの作業(少なくともインターネットアプリケーションテンプレートではMVC3)ではなく、標準のMVCスタイルフォームに使用することができるように、MVCが構築した控えめでないクライアントサイドの検証を使用することができます。 – kendaleiv

+0

オリジナルの編集内容をご覧ください – Ryan

+0

これは非常に興味深いアプローチであり、私はそれに多くの考えを与えました。私はC#からJavascriptに動作コードを生成することを考えてきました。それは、モデルを反映し、JavaScriptを生成する何かを作らなければならないと思う。たぶん、検証部分だけで、マッピングプラグインがそれをするようにしてください。マッピングと生成された検証コードの組み合わせにより、必要なものが得られます。検証コードを生成する必要があると思う理由は、Javascriptのみを使用して検証コードを生成するのは難しいと思うからですが、間違っている可能性があります。 –

答えて

7

Mvc Controls Toolkit私はknockout.jの通常のMvc検証(データ注釈など)を有効にするエンジンを実装しました。クライアント側とサーバー側の両方の検証を有効にすることができます。さらに、ノックアウトはMvcヘルパーで使用でき、いくつかのバインディングは自動的に推測されます。

+0

MVC Controls Toolkitを使用して実装した方法で私たちを始めることができれば幸いです。多くのお礼ありがとうございます – Ian

0

:この中へ

[Required] 
public string Firstname { get; set; } 

:これを自動的にオンにします。

マッピングから作成するかどうかは関係ありません。マッピングが完了した後に実行する関数を作成し、必要なすべての検証を追加するだけです。

または、検証バインディングを使用できます。ノックアウトの検証については、GithubのReadmeを読んでください。

+0

オリジナルの質問 – Ryan

1

私は、あなたがそれを呼び出すために必要がある場合がありますMVCで構築クライアント側の検証を使用することをお勧めし、これを試してみた:

$.validator.unobtrusive.parse(yourFormElement) 

コードから:MVC2は控えめなクライアント側の検証をしかし持っている場合https://stackoverflow.com/a/5669575/941536

わかりません必要に応じてMVC3へのアップグレードがオプションになるかどうかは不明です。

+4

で私の編集を見てくださいこれはKnockoutJsを検証するための好ましい方法ではありません。フォーム要素を検証する必要はありません。ビューモデルを検証する必要があります。 –

+2

DataAnnotationsまたはFluentValidator .NetコードをKnockout検証で再利用し、Knockoutビューモデルを検証する簡単な方法はありますか?私はむしろ、検証ルールの2つのセットを作成し、維持することを避けたいと思いますが、ノックアウトビューモデルと.Netモデルが一致しないか、あまり類似していないと、さらに難しいかもしれません。 – kendaleiv

+0

"これはKnockoutJsを検証するための好ましい方法ではありません"。どうして?検証はユーザの入力に接続され、入力要素は通常モデルのプロパティにマッピングされます。入力フィールドには接続されていないが、ユーザーが見ることのできないモデルプロパティーにエラーメッセージを表示すると、ユーザーが多く混乱する可能性があります。 –

5

knockoutjsとjqueryを使用している場合は、基本的なクライアントサイド検証を行う次の非常に簡単な方法を考え出しました。

あなたのページにエラーメッセージを表示したい場合はいつでも、このようなスパンタグが含まれています

<span name="validationError" style="color:Red" 
data-bind="visible: yourValidationFunction(FieldNameToValidate())"> 
* Required. 
</span> 

明らかにあなたはそれがやりたいものは何でもする「yourValidationFunction」を記述する必要があります。 trueまたはfalseを返すだけで、エラーが表示されます。

jqueryを使用すると、検証エラーが表示された場合にユーザーが先に進まないようにすることができます。これが出て、他の多くの検証ソリューションよりも多くの、よりシンプルで柔軟性のある

if ($("[name='validationError']:visible").length > 0) { 
     alert('Please correct all errors before continuing.'); 
     return; 
    } 

:あなたはおそらくすでにいくつかのAjaxまたは何を行うにはjavascript関数をトリガー保存ボタンを持っているので、ちょうどそれの上でこれを含めますそこ。どこでもエラーメッセージを配置することができ、検証ライブラリの使用方法を習得する必要はなく、この方法はサーバー側のテクノロジに関係なく機能します。

+0

+1私はあなたのソリューションのシンプルさが好きです。私は現在、非必須フィールドのためのjQuery valdiateに苦労しており、あなたの答えは新しい方向に私を指摘しました。 –

関連する問題