回到目录

有一句话,在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<Order_Detail> { new Order_Detail { Count = count, ProductId = productid, ProductName = productname, SalePrice = price } }
}; if (productid <= )
{
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 = });
}

回到目录

爱上MVC系列~前端验证与后端数据有效性验证的更多相关文章

  1. 架构设计系列-前端模式的后端(BFF)翻译PhilCalçado

    本文翻译自PhilCalçado的官网:https://philcalcado.com/2015/09/18/the_back_end_for_front_end_pattern_bff.html 对 ...

  2. 爱上MVC系列~过滤器实现对响应流的处理

    回到目录 MVC的过滤器相信大家都用过,一般用来作权限控制,因为它可以监视你的Action从进入到最后View的渲染,整个过程ActionFilter这个过滤器都参与了,而这给我们的开发带来了更多的好 ...

  3. 爱上MVC系列~带扩展名的路由失效问题

    回到目录 对MVC中,对URL进行重写变得非常方便,你只要设置相应的路由规则即可完成,但进行MVC3后,发现设置了以下路由,系统具体不认 routes.MapRoute( name: "De ...

  4. 个人永久性免费-Excel催化剂功能第60波-数据有效性验证增强版,补足Excel天生不足

    Excel在数据处理.数据分析上已经是公认的最好用的软件之一,其易用性和强大性也吸引无数的初中高级用户每天都在使用Excel.但这些优点的同时,也带出了一些问题,正因为其不同于一般的专业软件,需要专业 ...

  5. 购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(3)--Idetity,OWIN前后端验证

    原文:购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(3)--Idetity,OWIN前后端验证 chsakell分享了前端使用AngularJS,后端使用ASP. ...

  6. 【ASP.NET MVC系列】数据验证和注解

    [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作篇)(下) [04]浅谈ASP. ...

  7. Spring MVC之中前端向后端传数据

    Spring MVC之中前端向后端传数据和后端向前端传数据是数据流动的两个方向, 在此先介绍前端向后端传数据的情况. 一般而言, 前端向后端传数据的场景, 大多是出现了表单的提交,form表单的内容在 ...

  8. 【ASP.NET MVC系列】浅谈数据注解和验证

    [ASP.NET MVC系列]浅谈数据注解和验证   [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google C ...

  9. 购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(2)--前端,以及前后端Session

    原文:购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(2)--前端,以及前后端Session chsakell分享了前端使用AngularJS,后端使用ASP.NE ...

随机推荐

  1. HttpWebRequest 请求数据

    string fullUrl = "http://vip.AAA.cn/PreviewInterfaceAction.action?code=vip0008&data_digest= ...

  2. Java并发

    Java并发编程:Thread类的使用 http://www.cnblogs.com/dolphin0520/p/3920357.html 一.线程的状态 在正式学习Thread类中的具体方法之前,我 ...

  3. Samba网络配置

    Samba网络配置 操作环境 ubuntu14.04 1. 更新Linux源列表 sudo apt-get update 2. 安装Samba服务 sudo apt-get install samba ...

  4. Java学习笔记 05 数据包装类

    一.包装类 综述 >>java.lang包中的Integer类.Long类和Short类,分别将基本数据类型int.long和short封装成一个类.这些类都是Number的子类. Int ...

  5. git svn clone时间估算

    处理器: Intel(R) Xeon(R) CPU E5-2620 @2.00GHz 2.00Ghz 内存:32.0 GB 操作系统: Windows Server 2008 R2 Enterpris ...

  6. Xenu Link Sleuth-简单使用

    1.工具说明 xenu link sleuth,主要用于测试网站死链接.包括图片.链接. 下载地址:http://home.snafu.de/tilman/xenulink.html#Download ...

  7. C++ 中 int 转string, 以及10进制转2进制

    感谢:http://blog.csdn.net/xiaofei2010/article/details/7434737 以及:http://www.cnblogs.com/nzbbody/p/3504 ...

  8. 转发!HTML 复选框 checkbox 的 JavaScript 的全选和全反选

    checkbox 或者按钮实现 form 内的 checkbox 全选或者反选,代码很简单,全部代码如下: <html> <head> <meta http-equiv= ...

  9. :尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题。 ---> System.BadImageFormatException: 试图加载格式不正确的程序。

    iis有程序池有一个属性  是否启用32位应用程序默认是true的特别注意windows2008 服务器系统iis默认的是true 这样发布一下也是必须要做的

  10. 第54讲:Scala中复合类型实战详解

    今天学习了scala的复合类型的内容,让我们通过实战来看看代码: trait Compound_Type1trait Compound_Type2class Compound_Type extends ...