翻译:使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 – 4 – 验证 – 冠军

原文地址:http://ddmvc4.codeplex.com/

原文名称:Design and Develop a website using ASP.NET MVC 4, EF, Knockoutjs and Bootstrap

验证:

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

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

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

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

 

本文链接:http://www.cnblogs.com/haogj/archive/2013/06/11/3127022.html,转载请注明。

本条目发布于。属于.NetWEB分类。作者是
分享到:

发表评论

电子邮件地址不会被公开。 必填项已用*标注