Map Models Models to KnockoutJS検証
-
25-10-2019 - |
質問
ASP.NET MVC 2を使用してPageを構築しており、KnockoutJS、KnockoutJSマッピングプラグイン、およびjQuery 1.7.1を使用しています。また、knockoutjs検証プラグインも使用できます(見つかりました ここ)。ただし、サーバーとクライアントサイドの両方の検証を行う必要があります。
私のビューモデルをにマッピングすることは可能ですか KnockoutJS検証プラグイン .extend()メソッドを使用しますか?
編集:例。自動的にこれを回します:
[Required]
public string Firstname { get; set; }
これに:
var viewmodel = {
firstname: ko.observable().extend({ required: true });
}
解決
の中に MVCはツールキットを制御します knock.js.の両方で通常のMVC検証(データアノテーションなど)を有効にするエンジンを実装しました。さらに、ノックアウトはMVCヘルパーで使用でき、いくつかのバインディングは自動的に推測されます。
他のヒント
Knockoutjsとjqueryを使用している場合、基本的なクライアントサイド検証を行うための次の非常に簡単な方法を思いつきました。
ページにエラーメッセージを表示したい場合は、次のようなスパンタグを含めます。
<span name="validationError" style="color:Red"
data-bind="visible: yourValidationFunction(FieldNameToValidate())">
* Required.
</span>
明らかに、あなたがやりたいことを何でもするために「YourValidationFunction」を書く必要があります。真またはfalseを返す必要があります。真のことはエラーを表示することを意味します。
jQueryを使用して、検証エラーが表示された場合にユーザーが進行しないようにすることができます。おそらく、JavaScript関数をトリガーしてAjaxなどを行う保存ボタンがすでにあるので、これを上に含めるだけです。
if ($("[name='validationError']:visible").length > 0) {
alert('Please correct all errors before continuing.');
return;
}
これは、他の多くの検証ソリューションよりもはるかにシンプルで柔軟です。必要に応じてエラーメッセージを配置できます。また、検証ライブラリの使用方法を学ぶ必要はありません。この方法は、サーバーサイドテクノロジーに関係なく機能します。
組み込みのMVCクライアントサイド検証を使用することをお勧めします。それを呼び出す必要があるかもしれません。これを試してください。
$.validator.unobtrusive.parse(yourFormElement)
fromからのコード: https://stackoverflow.com/a/5669575/941536
ただし、MVC2に目立たないクライアントサイド検証があるかどうかはわかりませんが、必要に応じてMVC3へのアップグレードがオプションになるかどうかはわかりません。
検証プラグインは、検証する観測可能性を拡張する方法で機能します。
それらがマッピングから作成されているかどうかは関係ありません。マッピングが完了した後に実行する関数を作成し、必要なすべての検証を追加するだけです。
または、必要に応じて、検証バインディングを使用できます。ノックアウト検証のためにGitHubのReadmeを読んでください。