博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
爱上MVC系列~前端验证与后端数据有效性验证
阅读量:7120 次
发布时间:2019-06-28

本文共 3331 字,大约阅读时间需要 11 分钟。

有一句话,在10年前就是真理,到现在也一直都是,“前端验证可以没有,但后端验证必须要有”,这句话相信大家都没有意见吧,前端验证一般指通过JS方式实现的,友好的,个性的验证方式,而后端验证是指从表单提交过来,要进行入库之前的,数据有效性的验证,它不需要有美丽的外表,它需要有的仅仅是“有效”!

下面我将到MVC环境里的前端验证和后端验证作一个详细的说明,一个使用上的说明。

前端验证(KnockoutJs实现)

//创建订单使用knockoutJs    var CreateOrder = function () {        var self = this;        self.productid = ko.observable().extend({            required: true        });        self.productname = ko.observable().extend({            required: true        });        self.username = ko.observable().extend({            required: true        });        self.price = ko.observable().extend({            required: true,            min: { params: 1, message: "价格要是大于(0)的整数!" }        });        self.count = ko.observable().extend({            required: true,            min: { params: 1, message: "您最少也要买一个吧!" },            max: { params: 100, message: "最大一次只能买(100)个!" }        });        self.Do = function () {
//ko方法名需要是大写的 self.errors = ko.validation.group(self); if (self.isValid()) { $.ajax({ url: "/order/doOrder", type: "POST", data: { productid: self.productid(), productname: self.productname(), price: self.price(), count: self.count(), username: self.username() }, success: function (data) { if (data.code == 1) { location.href = location.href; } else alert(data.code); } }) } else { self.errors.showAllMessages(); } } } ko.applyBindings(new CreateOrder());

后端验证(数据实体有效性验证和ViewModel业务规则验证)

在这里多说两句,数据实体有效性验证是指和数据表相关的验证规则,如你的UserName字段长度为128字符,那么,你的实体验证的长度就是128,而ViewModel业务规则验证是指针对具体业务设计的视图模型,如用户注册模块,在这个模块里,你的UserName被产品经理规则为50个字符,那么,你的这个业务规则验证的长度就是50,当然,你的其它业务可能也用到了UserName字段,而它的业务规则当然可以不同,这就是有效性和业务规则。

下面代码是一个返回Json结果的Post请求方法,代码如下

public JsonResult DoOrder(int productid, string username, string productname, decimal price, int count)        {            var entity = new Entity.Order_Info            {                TotalPrice = price * count,                UserId = userid,                UserName = username,                AddDate = DateTime.Now,                Info = "用户下单",                Order_Detail = new List
{ new Order_Detail { Count = count, ProductId = productid, ProductName = productname, SalePrice = price } } }; if (productid <= 0) { ModelState.AddModelError("ProductId", "商品ID不合法..."); } #region 在action里拼接ModelState错误消息 var errors = new StringBuilder(); foreach (string key in ViewData.ModelState.Keys) { ModelState modelState = ViewData.ModelState[key]; foreach (ModelError error in modelState.Errors) { errors.Append(error.ErrorMessage + ","); } } #endregion if (entity.IsValid && ModelState.IsValid) orderService.DoOrder(entity); else return Json(new { code = entity.GetRuleViolationMessages() + errors }); return Json(new { code = 1 }); }

本文转自博客园张占岭(仓储大叔)的博客,原文链接:,如需转载请自行联系原博主。

你可能感兴趣的文章
oralce的function处理考勤时间节点以及计算工作时间
查看>>
(三)、一步一步学GTK+之布局
查看>>
43. ExtJs控件属性配置详细
查看>>
ros名称、命名空间和重映射
查看>>
系统进程查看 --- 微软官方出品
查看>>
Python 第三方模块安装出现的问题和解决方案.
查看>>
实验1
查看>>
CF915E Physical Education Lessons(珂朵莉树)
查看>>
洛谷P5050 【模板】多项式多点求值
查看>>
第十章:基本数据结构(2)
查看>>
php处理管道文件流
查看>>
Centos 6 搭建安装 Gitlab
查看>>
2012.02.13(rtsp)
查看>>
关于设置安卓屏幕的显示方向
查看>>
面试题10-二进制中1的个数
查看>>
cmd 查看域名对应的 IP
查看>>
LED流水灯程序——小白的单片机笔记
查看>>
sysdate
查看>>
股指期货模拟系统
查看>>
基于Spark的电影推荐系统(电影网站)
查看>>