gpt4 book ai didi

data-annotations - knockout 模板绑定(bind)中不显眼的客户端验证

转载 作者:行者123 更新时间:2023-12-04 03:05:09 26 4
gpt4 key购买 nike

我有一个带有数据注释的模型,并且我是一个动态绑定(bind),它使用 knockout 模板绑定(bind)和映射插件与 viewmodel 绑定(bind)。我正在尝试对我的模型进行不显眼的客户端验证。在这种情况下我们如何做到这一点。有什么帮助/建议吗?

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

在我看来,我正在使用 ajax 动态模板绑定(bind) MyUser 列表。
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>

最佳答案

pilavdzice 和 drogon 的答案非常好,但我们忘记了基本点。

由于我们使用 MVVM 模式来分离 UI 和数据 (+vm),我们不想执行 UI 验证,而是执行 DATA VALIDATION。这两者完全不同,jquery validate 是一个很棒的插件,但它会进行 UI 验证(它从 UI 开始检查字段)。

我找到了knockout validation plugin这似乎做得很好,它所做的是走相反的道路,它验证您的 View 模型而不是您的 UI(它实际上映射到 UI 元素以显示错误)。

不幸的是,如果您的 View 模型变得复杂,该插件将出现一些问题,但无论如何这是要走的路。

只要我们不使用 MVVM 模式,UI 验证就是完美的,毕竟我们分离组件(M-V-VM)是为了什么?

希望我有所帮助!

谢谢!

关于data-annotations - knockout 模板绑定(bind)中不显眼的客户端验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9147776/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com