在ASP.NET MVC中使用Knockout实践05,基本验证
本篇体验View Model验证。Knockout的subscribe方法能为View Model成员注册验证规则。
@{ViewBag.Title = "Index";Layout = "~/Views/Shared/_Layout.cshtml";}<style type="text/css">.error {color: red;}</style><input data-bind="value: name, valueUpdate: 'afterkeydown'"/><span class="error" data-bind="visible: hasError">最大长度为8!</span>@section scripts{<script src="~/Scripts/knockout-2.2.0.js"></script><script type="text/javascript">//使用构造函数创建一个View Modelvar User = function() {this.name = ko.observable("darren");this.hasError = ko.observable(false);//给name注册一个方法this.name.subscribe(function(newValue) {this.hasError(newValue && newValue.length > 8);}, this);};ko.applyBindings(new User());</script>}

以上的做法稍显繁琐。其实,使用NuGet上的"Knockout.Validation"是最明智的做法。
通过NuGet安装Knockout.Validation

安装完成后,在Scripts文件夹下多了如下文件。
在Scripts文件夹下创建zh-CN.js,用来汉化。
ko.validation.localize({required: '必填字段',min: '输入值必须大于等于 {0}',max: '输入值必须小于等于 {0}',minLength: '至少输入 {0} 个字符',maxLength: '输入的字符数不能超过 {0} 个',pattern: '请检查此值',step: '每次步进值是 {0}',email: 'email地址格式不正确',date: '日期格式不正确',dateISO: '日期格式不正确',number: '请输入一个数字',digit: '请输入一个数字',phoneUS: '请输入一个合法的手机号(US)',equal: '输入值不一样',notEqual: '请选择另一个值',unique: '此值应该是唯一的'});
Knockout.Validation的基本验证
□ 必填
@{ViewBag.Title = "Index";Layout = "~/Views/Shared/_Layout.cshtml";}<style type="text/css">.validationMessage {color: red;}</style><input data-bind="value: name, valueUpdate: 'afterkeydown'"/>@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">//使用构造函数创建一个View Modelvar User = function() {this.name = ko.observable("darren").extend({required:true});};ko.applyBindings(new User());</script>}
□ 最小值
this.name = ko.observable("darren").extend({ min: 2 });
□ 最大值
this.name = ko.observable("darren").extend({ max: 99 });
□ 最小长度
this.name = ko.observable("darren").extend({ minLength: 3 });
□ 最大长度
this.name = ko.observable("darren").extend({ maxLength: 12 });
□ 邮件
this.name = ko.observable("darren").extend({ email: true });
□ 正则表达式
this.name = ko.observable("darren").extend({ pattern: '^[a-z0-9].$' });
□ 相等
var otherObj = ko.observable();
var myObj = ko.observable().extend({ equal: otherObj });
var myObj = ko.observable().extend({ equal: 2 });
□ 不等
var otherObj = ko.observable();
var myObj = ko.observable().extend({ notEqual: otherObj });
var myObj = ko.observable().extend({ notEqual: 2 });
□ 日期
this.name = ko.observable("").extend({ date: true });
□ 数字,包括小数点
this.name = ko.observable("").extend({ number: true });
□ 整型
this.name = ko.observable("").extend({ digit: true });
□ 同时多个验证规则
this.name = ko.observable().extend({
required: true,
maxLength: 3
});
□ 验证View Model实例
@{ViewBag.Title = "Index";Layout = "~/Views/Shared/_Layout.cshtml";}<style type="text/css">.validationMessage {color: red;}</style><input data-bind="value: name, valueUpdate: 'afterkeydown'"/><br/><button id="btn">提交</button>@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">//使用构造函数创建一个View Modelvar User = function() {this.name = ko.observable().extend({required: true,maxLength: 3});};var user = new User();ko.applyBindings(user);ko.validatedObservable(user);$(function() {$('#btn').on("click", function() {if (user.isValid) {alert('ok');}});});</script>}
以上,必须先使用ko.validatedObservable方法,然后才能使用isValid方法判断是否验证通过。
参考资料:
https://github.com/Knockout-Contrib/Knockout-Validation/wiki
在ASP.NET MVC中使用Knockout实践05,基本验证的更多相关文章
- 在ASP.NET MVC中使用Knockout实践01,绑定Json对象
本篇体验在ASP.NET MVC下使用Knockout,将使用EF Code First创建数据库.最后让Knockout绑定一个Json对象. 创建一个领域模型. namespace MvcAppl ...
- 在ASP.NET MVC中使用Knockout实践06,自定义验证、异步验证
在上一篇中体验了Knockout.Validation的基本验证,本篇体验自定义验证和异步验证. 自定义验证规则 ko.validation有一个rules属性,专门用来存放验证规则,它是一个键值对集 ...
- 在ASP.NET MVC中使用Knockout实践09,自定义绑定
Knockout真正强大之处在于绑定机制,通过data-bind属性值体现绑定,不仅可以绑定值,还可以绑定事件,甚至可以自定义绑定. 从一个例子看Knockou的绑定机制 假设想给一个button元素 ...
- 在ASP.NET MVC中使用Knockout实践07,自定义验证信息的位置与内容
在前两篇中,体验了Knockout的基本验证和自定义验证.本篇自定义验证信息的显示位置与内容. 自定义验证信息的显示位置 通常,Knockout的验证信息紧跟在input后面,通过validation ...
- 在ASP.NET MVC中使用Knockout实践08,使用foreach绑定集合
本篇体验使用 foreach 绑定一个Product集合. 首先使用构造创建一个View Model. var Product = function(data) { this.name = ko.ob ...
- 在ASP.NET MVC中使用Knockout实践04,控制View Model的json格式内容
通常,需要把View Model转换成json格式传给服务端.但在很多情况下,View Model既会包含字段,还会包含方法,我们只希望把字段相关的键值对传给服务端. 先把上一篇的Product转换成 ...
- 在ASP.NET MVC中使用Knockout实践03,巧用data参数
使用Knockout,当通过构造函数创建View Model的时候,构造函数的参数个数很可能是不确定的,于是就有了这样的一个解决方案:向构造函数传递一个object类型的参数data. <inp ...
- 在ASP.NET MVC中使用Knockout实践02,组合View Model成员、Select绑定、通过构造器创建View Model,扩展View Model方法
本篇体验使用ko.computed(fn)计算.组合View Model成员.Select元素的绑定.使用构造器创建View Model.通过View Model的原型(Prototype)为View ...
- 在ASP.NET MVC中对手机号码的验证
在ASP.NET MVC中,可以使用RegularExpression特性来验证手机号码. public class Customer { [Required(ErrorMessage = " ...
随机推荐
- ajax与302响应
在ajax请求中,如果服务器端的响应是302 Found,在ajax的回调函数中能够获取这个状态码吗?能够从Response Headers中得到Location的值进行重定向吗?让我们来一起看看实际 ...
- Linux下创建软Raid
1- Linux下创建软Raid 步骤1.创建磁盘,并转换为fd #fdisk /dev/sdb //这里使用新的磁盘sdb 然后输入n ,创建分区 使用默认的起始点 输入大小为+100M 然后重 ...
- 关于阿里云和ucloud云服务器负载均衡器slb和ulb会话保持的配置
在阿里云slb或者ucloud的ulb上对公司网站后台做了负载均衡以后,发现经常需要重新登录,单独访问没有这样的问题,问题就出在session的保持上,在云控制台中有配置会话的相关选项 阿里云的配置 ...
- java虚拟机规范(se8)——java虚拟机结构(五)
2.10 异常 java虚拟机中的异常用Throwable类或者它的子类的实例来表示.抛出一个异常会导致立即非本地(an inmediate nolocal)的控制转移,从发生异常的地方跳到处理异常的 ...
- eclipse开发mapreduce程序时出现的问题
1.报HDFS权限不够:org.apache.hadoop.security.AccessControlException: Permission denied:user=ouqiping, acce ...
- 《剑指offer》二叉树镜像
剑指offer简单题,但是能一下写对也需要小心考虑细节. 题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / 6 10 / / 5 7 9 11 ...
- Sqlserver在现有数据库中插入数据
需求:1.客户提供的excel表和数据库中的表结构总是有一些差距,id的生成,各种字段的关联等等 2. 如何在Excel中生成Guid. 1.在Excel的宏中执行以下代码: Private Decl ...
- 黑马程序员_java基础笔记(13)...类加载器和代理
—————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流! —————————— 1,类加载器.2,代理. 1,类加载器. Java虚拟机中可以安装多个类加载器,系 ...
- (3)python tkinter-消息框、对话框、文件对话框
消息框 导入 import tkinter import tkinter.messagebox #这个是消息框,对话框的关键 提示消息框 tkinter.messagebox.showinfo('提示 ...
- 利用HTML5定位功能,实现在百度地图上定位(转)
原文:利用HTML5定位功能,实现在百度地图上定位 代码如下: 测试浏览器:ie11定位成功率100%,Safari定位成功率97%,(add by zhj :在手机上测试(用微信内置浏览器打开),无 ...