在ASP.NET MVC中使用Knockout实践06,自定义验证、异步验证
2014-11-02 13:21
405 查看
在上一篇中体验了Knockout.Validation的基本验证,本篇体验自定义验证和异步验证。自定义验证规则ko.validation有一个rules属性,专门用来存放验证规则,它是一个键值对集合类型,key就是自定义验证规则的名称,value是一个json对象。
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<style type="text/css">
.validationMessage {
color: red;
}
</style>
<input data-bind="value: name, valueUpdate: 'afterkeydown'"/><br/>
@section scripts
{
<script src="~/Scripts/knockout-2.2.0.js"></script>
<script src="~/Scripts/knockout.validation.js"></script>
<script src="~/Scripts/zh-CN.js"></script>
<script type="text/javascript">
//自定义验证规则
ko.validation.rules["myCustomValidation"] = {
validator: function(val, otherVal) {
return val == otherVal;
},
message: '输入值必须和{0}相等'
};
//注册自定义规则
ko.validation.registerExtenders();
//使用构造函数创建一个View Model
var User = function() {
this.name = ko.observable().extend({
myCustomValidation: 3
});
};
//创建实例
var user = new User();
//绑定
ko.applyBindings(user);
$(function() {
});
</script>
}还可以把自定义规则以匿名函数的形式放在extend方法之内,还可以同时注册多个自定义验证规则。
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<style type="text/css">
.validationMessage {
color: red;
}
</style>
<input data-bind="value: name, valueUpdate: 'afterkeydown'"/><br/>
@section scripts
{
<script src="~/Scripts/knockout-3.2.0.js"></script>
<script src="~/Scripts/knockout.validation.js"></script>
<script src="~/Scripts/zh-CN.js"></script>
<script type="text/javascript">
//使用构造函数创建一个View Model
var User = function () {
this.name = ko.observable().extend({
validation: [{
validator: function (val, someOtherVal) {
return val == someOtherVal;
},
message: '必须是 5',
params: 5
}]
});
};
//创建实例
var user = new User();
//绑定
ko.applyBindings(user);
$(function () {
});
</script>
}自定义异步验证规则假设,现在需要根据前台输入的Product的Id来判断是否存在。在HomeController中提供一个根据id判断是否存在的Action方法,返回json格式。
static readonly IProductRepository repository = new ProductRepository();
......
[HttpPost]
public JsonResult JudgeProduct(int id)
{
//获取所有记录
var allProducts = repository.GetAll();
//获取所有的ids
IEnumerable<int> ids = from p in allProducts
select p.Id;
if (ids.Contains(id))
{
return Json(new {msg = true});
}
else
{
return Json(new { msg = false });
}
}前台需要给View Model实例注册异步验证规则。
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<style type="text/css">
.validationMessage {
color: red;
}
</style>
<input data-bind="value: id, valueUpdate: 'afterkeydown'"/><br/>
@section scripts
{
<script src="~/Scripts/knockout-3.2.0.js"></script>
<script src="~/Scripts/knockout.validation.js"></script>
<script src="~/Scripts/zh-CN.js"></script>
<script type="text/javascript">
//使用构造函数创建一个View Model
var Product = function () {
this.id = ko.observable();
this.isExist = ko.validatedObservable(true);
};
//创建实例
var product = new Product();
//给实例成员注册自定义验证逻辑
product.id.subscribe(function () {
$.post('@Url.Action("JudgeProduct","Home")', { id: product.id() }, function (data) {
product.isExist(data.msg);
});
});
//给实例成员实施验证
product.id.extend({
validation: {
validator: function (val, param) {
return product.isExist();
},
message: "数据库中没有此款产品"
}
});
//绑定
ko.applyBindings(product);
$(function () {
});
</script>
}以上,通过subscribe方法,给Product的实例字段id注册了一个自定义验证规则,向服务端发送POST请求,把返回的结果赋值给Prouct的实例字段isExist。再给Product的实例字段id扩展自定义验证规则,返回Product实例字段isExist的值,如果为true,表示验证通过,反之,验证不通过。
相关文章推荐
- 在ASP.NET MVC中使用Knockout实践07,自定义验证信息的位置与内容
- 在ASP.NET MVC中使用Knockout实践09,自定义绑定
- 在ASP.NET MVC中使用Knockout实践05,基本验证
- 在ASP.NET MVC中使用Knockout实践02,组合View Model成员、Select绑定、通过构造器创建View Model,扩展View Model方法
- 在ASP.NET MVC中使用Knockout实践01,绑定Json对象
- 在ASP.NET MVC中使用Knockout实践08,使用foreach绑定集合
- ASP.NET MVC 3 使用Model自定义验证的样式
- ASP.NET MVC验证 - 使用哪种方式实现客户端服务端双重异步验证
- ASP.NET自定义身份验证的实践(Page.User.Identity.Name的使用)
- 在ASP.NET MVC中使用Knockout实践04,控制View Model的json格式内容
- ASP.NET Web API实践系列06, 在ASP.NET MVC 4 基础上增加使用ASP.NET WEB API
- 使用asp.net mvc,boostrap及knockout.js开发微信自定义菜单编辑工具(推荐)
- 翻译:使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 4 - 验证
- 在ASP.NET MVC中使用Knockout实践03,巧用data参数
- ASP.NET MVC实践系列3-服务器端数据验证
- 使用ASP.NET MVC Futures 中的异步Action 推荐
- 如何:使用自定义函数对 ASP.NET 服务器控件进行验证
- 使用ASP.NET Atlas开发实时验证用户名是否被注册的自定义Behavior
- 【译】使用自定义ViewHelper来简化Asp.net MVC view的开发------part2
- 使用ASP.NET MVC Futures 中的异步Action