/ /ノキアウトのASP.NET MVCカミソリフォームは検証されません - asp.net-mvc、razor、knockout.js、validation

ノックアウトのASP.NET MVCカミソリフォームは検証されません - asp.net-mvc、razor、knockout.js、validation

私はこのようなモデルを持っている(単純化された)

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"
}
});