私はこのようなモデルを持っている(単純化された)
public class User
{
[Required]
public string UserName { get; set; }
// Other fields
}
ノックアウトのあるMVCカミソリビュー viewModel
それはこのように見えます:
@using (Html.BeginForm("MyAction", FormMethod.Post, new { id = "profileEditorForm" }))
{
@Html.ValidationSummary(false)
@Html.LabelFor(n => n.UserName)
@Html.TextBoxFor(n => n.UserName, new { data_bind = "value: UserName" })
@Html.ValidationMessageFor(n => n.UserName)
@* Other fields *@
<p>
<input type="submit" value="Save" alt="" title="" />
<a href="/">Cancel</a>
</p>
}
<script type="text/javascript">
$(function() {
var vm = new viewModel(@(Html.Raw(Json.Encode(@Model))));
ko.applyBindings(vm);
$("#profileEditorForm").validate({
submitHandler: function(form) {
alert("Validating " + ko.toJSON(vm));
if (vm.save)
window.location.href = "/";
return false;
}
});
});
var viewModel = function(model) {
var self = this;
self.UserName = ko.observable(model.UserName);
// Other fields
self.save = function() {
alert("Saving " + ko.toJSON(self));
}
};
};
</script>
クライアント側の検証を私に与えることができませんそれはバリデーション機能(アラート挿入はそのことを示しています)を経てストレートに保存され、有効でないものをMVCアクションにポストバックします。
クライアント側を有効にする方法を教えてください。このフォームの検証(web.confirで有効になります)。すべてのバインディングは完全にうまくいっていますが、それは私が見ていて何も見ていないものですか?
ヘルプは非常に高く評価!
回答:
回答№1は2バリデーションはノックアウトバインディングでは機能しません....
クライアント側で検証を複製する必要があります。より速い方法は、ノックアウト検証プラグインを使用していますが、多くのデータがある場合は遅くなります。
https://github.com/ericmbarnard/Knockout-Validation
または、単にjqueryのバリデーションを使用することもできます。
回答№2の場合は0
モデルの検証ダウンロードしなければならないノックアウトバインディングでは機能しません knockoutValidation.js ファイルとノックアウト検証を使用する
例:
KnockoutJSのUserNameの検証
var self = this;
self.UserName = ko.observable(UserName).extend({
required: {
message:"Please enter User Name"
}
});