验证:

快要完成我们程序的界面部分了。剩下的事情就是在用户点击 "保存" 的时候管理验证问题了。验证是主要需求,今天就是最无知的应用也不会忽视它。通过正确的验证,用户可以知道应该输入什么数据。下面,我们将会讨论 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:     到达日期必须大于出发日期

  1. this.ToDate = ko.observable().extend({
  2. equal: function () { return (val > $(‘#FromDate’).val()) ? val : val + "|" }
  3. });

Scenario 10: 电话号码只接受 -+ () 0-9 

  1. var regex = /\(?([0-9]{3})\)?([ .-]?)([0-9]{3})\2([0-9]{4})/
  2. this.PhoneNumber = ko.observable().extend({ pattern: regex });

好了,我们已经看到各种类型的验证场景和使用方式;现在在我们的程序中使用它们。我们的验证规则如下所示:

  1. var Profile = function (profile) {
  2. var self = this;
  3. self.ProfileId = ko.observable(profile ? profile.ProfileId : 0).extend({ required: true });
  4. self.FirstName = ko.observable(profile ? profile.FirstName : '').extend({ required: true, maxLength: 50 });
  5. self.LastName = ko.observable(profile ? profile.LastName : '').extend({ required: true, maxLength: 50 });
  6. self.Email = ko.observable(profile ? profile.Email : '').extend({ required: true, maxLength: 50, email: true });
  7. self.PhoneDTO = ko.observableArray(profile ? profile.PhoneDTO : []);
  8. self.AddressDTO = ko.observableArray(profile ? profile.AddressDTO : []);
  9. };
  10.  
  11. var PhoneLine = function (phone) {
  12. var self = this;
  13. self.PhoneId = ko.observable(phone ? phone.PhoneId : 0);
  14. self.PhoneTypeId = ko.observable(phone ? phone.PhoneTypeId : undefined).extend({ required: true });
  15. self.Number = ko.observable(phone ? phone.Number : '').extend({ required: true, maxLength: 25, phoneUS: true });
  16. };
  17.  
  18. var AddressLine = function (address) {
  19. var self = this;
  20. self.AddressId = ko.observable(address ? address.AddressId : 0);
  21. self.AddressTypeId = ko.observable(address ? address.AddressTypeId : undefined).extend({ required: true });
  22. self.AddressLine1 = ko.observable(address ? address.AddressLine1 : '').extend({ required: true, maxLength: 100 });
  23. self.AddressLine2 = ko.observable(address ? address.AddressLine2 : '').extend({ required: true, maxLength: 100 });
  24. self.Country = ko.observable(address ? address.Country : '').extend({ required: true, maxLength: 50 });
  25. self.State = ko.observable(address ? address.State : '').extend({ required: true, maxLength: 50 });
  26. self.City = ko.observable(address ? address.City : '').extend({ required: true, maxLength: 50 });
  27. self.ZipCode = ko.observable(address ? address.ZipCode : '').extend({ required: true, maxLength: 15 });
  28. };

提供验证之后,在点击 "保存” 的时候,将会如下所示:


我们已经实现了 UI 部分,仍然没有任何实际的数据访问,创建 UI   部分没有依赖任何实际的业务逻辑,非常棒!

下一步,我们将会讨论如何使用分层的结构实现数据库设计和业务逻辑。

文章转载于:http://www.cnblogs.com/haogj/

翻译:使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 4 - 验证的更多相关文章

  1. 使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 6 - 业务逻辑

    翻译:使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 6 - 业务逻辑 Part 3: 设计逻辑层:核心开发 如前所述,我们的解决方案 ...

  2. 翻译:使用 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 ...

  3. 翻译:使用 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 ...

  4. 翻译:使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 6 - 业务逻辑

    Part 3: 设计逻辑层:核心开发 如前所述,我们的解决方案如下所示: 下面我们讨论整个应用的结构,根据应用中不同组件的逻辑相关性,分离到不同的层中,层与层之间的通讯通过或者不通过限制.分层属于架构 ...

  5. 翻译:使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 5 - 数据库设计

    数据库方面我们需要的主要功能如下: 联系人有姓名和电子邮件地址. 联系人可以拥有多个地址. 联系人可以拥有多个电话. 为了实现目标,我们需要在数据库中创建下列表.表与表的关系如下图所示: 数据库的脚本 ...

  6. 翻译:使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 2

    我们的目标: 需求 Screen 1: 联系人列表 - 查看所有联系人 1.1 这个 screen 将显示数据库中的所有联系人. 1.2 用户可以删除任何联系人.1.3 用户可以编辑任何联系人的详细信 ...

  7. Asp.net mvc + .net ef database first 或 model first 时如何添加验证特性

    今天有个同事问到,在使用Entity Framework 的Database frist或model first时,怎么在model上添加验证的特性? 因为此时的Model是是VS 工具怎么生成的,直 ...

  8. ASP.NET MVC和EF集成AngularJS开发

    参考资料: 如何在ASP.NET MVC和EF中使用AngularJS AngularJS+ASP.NET MVC+SignalR实现消息推送 [AngularJs + ASP.NET MVC]使用A ...

  9. [翻译] 使用ASP.NET MVC操作过滤器记录日志

    [翻译] 使用ASP.NET MVC操作过滤器记录日志 原文地址:http://www.singingeels.com/Articles/Logging_with_ASPNET_MVC_Action_ ...

随机推荐

  1. junit4进行单元测试

    一.前言 提供服务的时候,为了保证服务的正确性,有时候需要编写测试类验证其正确性和可用性.以前的做法都是自己简单写一个控制层,然后在控制层里调用服务并测试,这样做虽然能够达到测试的目的,但是太不专业了 ...

  2. Node.js:dgram模块实现UDP通信

    1.什么是UDP? 这里简单介绍下,UDP,即用户数据报协议,一种面向无连接的传输层协议,提供不可靠的消息传送服务.UDP协议使用端口号为不同的应用保留其各自的数据传输通道,这一点非常重要.与TCP相 ...

  3. 在Windows上编译和调试CoreCLR

    生成CoreCLR - Windows篇 本文的唯一目的就是让你运行Hello World 运行环境 Window 7+ Visual studio 2015 确保C++ 工具已经被安装,默认是不安装 ...

  4. C# 程序中嵌入百度地图

    本例是对WinForm中使用百度地图的简要介绍.百度地图目前支持Android开发,IOS开发,Web开发,服务接口,具体可以参照'百度地图开放平台'. [动态加载百度地图]涉及到的知识点: WebB ...

  5. BPM配置故事之案例12-触发另外流程

    还记得阿海么,对就是之前的那个采购员,他又有了些意见. 阿海:小明,你看现在的流程让大家都这么方便,能不能帮个忙让我也轻松点啊-- 小明:--你有什么麻烦,现在不是已经各个部门自己提交申请了嘛? 阿海 ...

  6. JAVA环境变量和TomCat服务器配置

    Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选.对于一个初学者来说,可以这样 ...

  7. Linux程序包管理之rpm

    rpm简介 rpm( Red Hat Package Manager )是一个开放的软件包管理系统.它工作于Red Hat Linux及其他Linux系统,成为Linux中公认的软件包管理标准. rp ...

  8. CYQ.Data V5 从入门到放弃ORM系列:教程 - MAction类使用

    背景: 随着V5框架使用者的快速增加,终于促使我开始对整个框架编写完整的Demo. 上周大概花了一星期的时间,每天写到夜里3点半,终完成了框架所有功能的Demo. 同时,按V5框架名称空间的顺序,对每 ...

  9. 【腾讯Bugly干货分享】程序员们也该知道的事——“期权和股票”

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/pfj9NLLuKYAfJJF84R9WAw 作者:B ...

  10. topshelf和quartz内部分享

    阅读目录: 介绍 基础用法 调试及安装 可选配置 多实例支持及相关资料 quartz.net 上月在公司内部的一次分享,现把PPT及部分交流内容整理成博客. 介绍 topshelf是创建windows ...