У меня есть модель с аннотациями данных, и я динамически привязываю, что с viewmodel с использованием привязки шаблона нокаута и картографического плагина. Я пытаюсь сделать ненавязчивую проверку клиента для моей модели. Как мы можем это сделать в этом сценарии. Любая помощь/предложения?ненавязчивая проверка клиента при привязке шаблона нокаута
public class MyUser
{
[Required]
[StringLength(35)]
public string Username { get; set; }
[Required]
[StringLength(35)]
public string Forename { get; set; }
[Required]
[StringLength(35)]
public string Surname { get; set; }
}
На мой взгляд, я динамически привязываю список MyUser, используя ajax.
public JsonResult TestKnockout()
{
IList<MyUser> myUserList = new List<MyUser>();
myUserList.Add(new MyUser { Username = "ajohn", Surname = "surname" });
myUserList.Add(new MyUser { Username = "ajohn1", Surname = "surname1" });
return Json(myUserList, JsonRequestBehavior.AllowGet);
}
}
Вид:
<form id="Userform" action='@Url.Action("Save", "Home")' data-bind="template: {name: 'UserTemplate', foreach:UserList}">
<input type="Submit" name="name" value="Submit" />
</form>
<script id="UserTemplate" type="text/Html">
<input type="text" data-bind="value: Username"></input>
<input type="text" data-bind="value: Forename"></input>
<input type="text" data-bind="value: Surname"></input>
</script>
<script type="text/javascript">
var viewModel = {
UserList: ko.observableArray(new Array()),
Save: function() {
//// reached here means validation is done.
alert("Save");
}
}
ko.applyBindings(viewModel);
$.ajax({
type: 'GET',
url: '../Home/TestKnockout',
contentType: "application/json",
success: function (data) {
$.each(ko.mapping.fromJS(data)(), function() {
viewModel.UserList.push(this);
})
// attach the jquery unobtrusive validator
$.validator.unobtrusive.parse("#Userform");
// bind the submit handler to unobtrusive validation.
$("#Userform").data("validator").settings.submitHandler = viewModel.Save;
},
error: function (xhr, ajaxOptions, thrownError) {
alert(xhr.status);
alert(thrownError);
}
});
</script>
привет, я просто изучаю плагин knockoutvalidation, и я просто хочу знать, поддерживает ли он аннотации данных на стороне сервера из коробки? или нужно выполнить всю проверку на клиентской модели viewmodel. благодаря? – afr0
В качестве побочного примечания - я думаю, что комментарий к первой части @pilavdzice был довольно близок к этому - он полагается на метод из ViewModel для предоставления результатов проверки данных. – ZenMaster
Да, это ближе к проверке модели, но с другой стороны это решение зависит от пользовательского интерфейса, вызывающего определенную функцию, для проверки элемента модели. Это означает, что модель и ui связаны. Лучшим решением будет модель для автоматической проверки, а ui - только для проверки/отображения результатов проверки. –