翻译:使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 4 - 验证
验证:
快要完成我们程序的界面部分了。剩下的事情就是在用户点击 "保存" 的时候管理验证问题了。验证是主要需求,今天就是最无知的应用也不会忽视它。通过正确的验证,用户可以知道应该输入什么数据。下面,我们将会讨论 KnockoutJS Validation 库,可以通过从这里下载。也可以直接通过 NuGet 获取,
先让我们看看常用的验证场景,以及如何使用。
这里有篇文章讨论 Knockout 扩展的原理:翻译:使用 Knockout 扩展器扩展 observables
Scenario 1: 表单中必须输入名字
this.FirstName = ko.observable().extend({ required: true });
Scenario 2: 名字最多包含 50 个字符,至少包含 3 个字符
this.FirstName = ko.observable().extend({ maxLength: 50, minLength:3});
Scenario 4: 年龄必须输入,必须大于 18 ,小于 100
this.Age = ko.observable().extend({ required: true, max: 100, min:18 });
Scenario 5: 必须提供电子邮件,地址必须是正确的电子邮件格式
this.Email = ko.observable().extend({ required: true, email: true });
Scenario 6: 必须提供生日,日期必须是正确的日期格式
this.DateOfBirth = ko.observable().extend({ required: true, date: true });
Scenario 7: 必须提供价格,必须是正确的数字或者货币格式
this.Price = ko.observable().extend({ required: true, number: true });
Scenario 8: 必须提供电话号码,而且必须是正确的美国格式
Note: 正确的美国电话号码是这种格式: 1–xdd–xdd–dddd
"1–" 在开始部分是可选的,包括短划线,x 是 2 到 9 的任意数字,d 为任意数字.
this.Phone = ko.observable().extend({ required: true, phoneUS: true });
Scenario 9: 到达日期必须大于出发日期
this.ToDate = ko.observable().extend({
equal: function () { return (val > $(‘#FromDate’).val()) ? val : val + "|" }
});
Scenario 10: 电话号码只接受 -+ () 0-9
var regex = /\(?([0-9]{3})\)?([ .-]?)([0-9]{3})\2([0-9]{4})/
this.PhoneNumber = ko.observable().extend({ pattern: regex });
好了,我们已经看到各种类型的验证场景和使用方式;现在在我们的程序中使用它们。我们的验证规则如下所示:

var Profile = function (profile) {
var self = this;
self.ProfileId = ko.observable(profile ? profile.ProfileId : 0).extend({ required: true });
self.FirstName = ko.observable(profile ? profile.FirstName : '').extend({ required: true, maxLength: 50 });
self.LastName = ko.observable(profile ? profile.LastName : '').extend({ required: true, maxLength: 50 });
self.Email = ko.observable(profile ? profile.Email : '').extend({ required: true, maxLength: 50, email: true });
self.PhoneDTO = ko.observableArray(profile ? profile.PhoneDTO : []);
self.AddressDTO = ko.observableArray(profile ? profile.AddressDTO : []);
};
var PhoneLine = function (phone) {
var self = this;
self.PhoneId = ko.observable(phone ? phone.PhoneId : 0);
self.PhoneTypeId = ko.observable(phone ? phone.PhoneTypeId : undefined).extend({ required: true });
self.Number = ko.observable(phone ? phone.Number : '').extend({ required: true, maxLength: 25, phoneUS: true });
};
var AddressLine = function (address) {
var self = this;
self.AddressId = ko.observable(address ? address.AddressId : 0);
self.AddressTypeId = ko.observable(address ? address.AddressTypeId : undefined).extend({ required: true });
self.AddressLine1 = ko.observable(address ? address.AddressLine1 : '').extend({ required: true, maxLength: 100 });
self.AddressLine2 = ko.observable(address ? address.AddressLine2 : '').extend({ required: true, maxLength: 100 });
self.Country = ko.observable(address ? address.Country : '').extend({ required: true, maxLength: 50 });
self.State = ko.observable(address ? address.State : '').extend({ required: true, maxLength: 50 });
self.City = ko.observable(address ? address.City : '').extend({ required: true, maxLength: 50 });
self.ZipCode = ko.observable(address ? address.ZipCode : '').extend({ required: true, maxLength: 15 });
};

提供验证之后,在点击 "保存” 的时候,将会如下所示:
我们已经实现了 UI 部分,仍然没有任何实际的数据访问,创建 UI 部分没有依赖任何实际的业务逻辑,非常棒!
下一步,我们将会讨论如何使用分层的结构实现数据库设计和业务逻辑。
文章转载于:http://www.cnblogs.com/haogj/
翻译:使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 4 - 验证的更多相关文章
- 使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 6 - 业务逻辑
翻译:使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 6 - 业务逻辑 Part 3: 设计逻辑层:核心开发 如前所述,我们的解决方案 ...
- 翻译:使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 3
原文地址:http://ddmvc4.codeplex.com/ 原文名称:Design and Develop a website using ASP.NET MVC 4, EF, Knockout ...
- 翻译:使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 1
原文地址:http://ddmvc4.codeplex.com/ 原文名称:Design and Develop a website using ASP.NET MVC 4, EF, Knockout ...
- 翻译:使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 6 - 业务逻辑
Part 3: 设计逻辑层:核心开发 如前所述,我们的解决方案如下所示: 下面我们讨论整个应用的结构,根据应用中不同组件的逻辑相关性,分离到不同的层中,层与层之间的通讯通过或者不通过限制.分层属于架构 ...
- 翻译:使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 5 - 数据库设计
数据库方面我们需要的主要功能如下: 联系人有姓名和电子邮件地址. 联系人可以拥有多个地址. 联系人可以拥有多个电话. 为了实现目标,我们需要在数据库中创建下列表.表与表的关系如下图所示: 数据库的脚本 ...
- 翻译:使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 2
我们的目标: 需求 Screen 1: 联系人列表 - 查看所有联系人 1.1 这个 screen 将显示数据库中的所有联系人. 1.2 用户可以删除任何联系人.1.3 用户可以编辑任何联系人的详细信 ...
- Asp.net mvc + .net ef database first 或 model first 时如何添加验证特性
今天有个同事问到,在使用Entity Framework 的Database frist或model first时,怎么在model上添加验证的特性? 因为此时的Model是是VS 工具怎么生成的,直 ...
- ASP.NET MVC和EF集成AngularJS开发
参考资料: 如何在ASP.NET MVC和EF中使用AngularJS AngularJS+ASP.NET MVC+SignalR实现消息推送 [AngularJs + ASP.NET MVC]使用A ...
- [翻译] 使用ASP.NET MVC操作过滤器记录日志
[翻译] 使用ASP.NET MVC操作过滤器记录日志 原文地址:http://www.singingeels.com/Articles/Logging_with_ASPNET_MVC_Action_ ...
随机推荐
- 通过 floating IP 访问 VIP - 每天5分钟玩转 OpenStack(126)
前面我们是直接用 curl 测试 VIP,在更为真实的场景中通常会使用 floating IP 访问 VIP. 下面我们给 VIP 关联一个 floating IP,再进行测试. 访问 Project ...
- python笔记(持续更新)
1.编译python遇到下面的编码问题: SyntaxError: Non-ASCII character '\xe9' in file E:\projects\learn.py on lin ...
- 从netty-example分析Netty组件续
上文我们从netty-example的Discard服务器端示例分析了netty的组件,今天我们从另一个简单的示例Echo客户端分析一下上个示例中没有出现的netty组件. 1. 服务端的连接处理,读 ...
- python基础
内容概要: 一.python2 or python3 目前大多使用python2.7,随着时间的推移,python3将会成为python爱好者的主流. python2和3区别: 1.PRINT IS ...
- Canvas讲解
1.Canvas是什么? 简单地说canvas是画布,可以进行画任何的线.图形.填充等一系列的操作,而且操作的画图就是js, 提供简单的二维矢量绘图. 2.步骤: <canvas id=&quo ...
- Flexible 弹性盒子模型之CSS flex-shrink 属性
实例 让第二个元素收缩到其他元素的三分之一: 效果预览 div:nth-of-type(2){flex-shrink:3;} 浏览器支持 表格中的数字表示支持该属性的第一个浏览器的版本号. 紧跟在 - ...
- KOTLIN开发语言文档(官方文档) -- 2.基本概念
网页链接:https://kotlinlang.org/docs/reference/basic-types.html 2. 基本概念 2.1. 基本类型 从可以在任何变量处理调用成员函数和属性 ...
- hbase集群安装与部署
1.相关环境 centos7 hadoop2.6.5 zookeeper3.4.9 jdk1.8 hbase1.2.4 本篇文章仅涉及hbase集群的搭建,关于hadoop与zookeeper的相关部 ...
- Linux根文件系统分析之init和busybox
Hi,大家好!我是CrazyCatJack.今天给大家讲解Linux根文件系统的init进程和busybox的配置及编译. 先简单介绍一下,作为一个嵌入式系统,要想在硬件上正常使用的话.它的软件组成大 ...
- KVM安装部署
KVM安装部署 公司开始部署KVM,KVM的全称是kernel base virtual machine,对KVM虚拟化技术研究了一段时间, KVM是基于硬件的完全虚拟化,跟vmware.xen.hy ...