您的位置:首页 > Web前端 > BootStrap

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

2013-06-11 22:45 986 查看
原文地址: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 });
};


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



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

下一步,我们将会讨论如何使用分层的结构实现数据库设计和业务逻辑。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐