最近有项目需要使用.net的web,啥也不说,直接开始学习.net的mvc框架。感觉微软的web项目其实还是很好用的,今天和大家分享一下服务端验证的事情。其实原理就是用到了c#的特性,特性不用多说,大家都应该很清楚,也是一个类,标记了特性的类或者方法,就可以是用特性类的数据,并且打上了一个特殊的标记,以方便我们进行区分从而进行调用。

话不多说,直接开始!

第一步:自定义特性类

public class CustomAttribute : ValidationAttribute
{
public Int32 age { get; set; }
public CustomAttribute(int age)
{
this.age = age;
}
//这里的value参数来源于字段值
public override bool IsValid(object value)
{
if ((Int32)value < this.age)
return false;
else
return true;
} //这里的name参数来源于ErrorMessage
public override string FormatErrorMessage(string name)
{
return name+"必须大于20";
}
}

继承于ValidationAttribute,并且主要是重写IsValid和FormatErrorMessage。

第二步:定义model,并且添加特性

public class People
{
[Display(Name = "姓名")]
public string name{get;set;} [Display(Name = "年龄")]
[Custom(,ErrorMessage ="年龄")]
public int? age { get; set; }
}

第三步:前端代码,前端借用了HTML的封装方法快速生成字段,注意这里需要在css中设置field-validation-error的颜色,否则提示不明显

@using MiniWeb.Models
@model People
@{
ViewBag.Title = "addPeople";
}
<style type="text/css">
.field-validation-error {
color:red;
}
</style> <div class="container">
<h2>addPeople</h2> <form action="doAdd" method="post">
@using (Html.BeginForm())
{
@Html.EditorForModel()
<input type="submit" value="提交" />
}
</form>
</div>

第四步:action的代码,通过内置属性ModelState.IsValid来判断是否通过验证

public ActionResult doAdd(People p)
{
if (!ModelState.IsValid)
{
return View("addPeople");
}
return Content("成功");
}

至此完毕!总结一下整个过程,当前端调用action的时候,后台默认都会检查model对象是否定义了特性验证,正是因为这个原因才会最终进入验证判断。验证的详细结果在前台我们通过@HTML.ValidationMessageFor可以获取。本实例中@Html.EditorForModel()已经把ValidationMessageFor封装进去了。通过本例我们可以看到,微软封装的强大和服务端验证的实际后台逻辑到底是如何实现的!

ASP.NET的服务端验证(干货)的更多相关文章

  1. Asp.net MVC 服务端验证多语言错误

    服务端验证用户提交信息时为了实现多语言使用了资源文件,如: using System.ComponentModel.DataAnnotations; public class UserModel { ...

  2. ASP.NET MVC如何实现自定义验证(服务端验证+客户端验证)

    ASP.NET MVC通过Model验证帮助我们很容易的实现对数据的验证,在默认的情况下,基于ValidationAttribute的声明是验证被使用,我们只需 要将相应的ValidationAttr ...

  3. .net使用FluentValidation进行服务端验证。

          背景 最近使用asp.mvc 做一个在线口语系统项目,在服务端验证问题遇到了一些小问题. 自己根据数据库表user定义一个数据库表实体对象UserDbEntity [Table(" ...

  4. asp.net获取服务端和客户端信息

    asp.net获取服务端和客户端信息 获取服务器名:Page.Server.ManchineName获取用户信息:Page.User 获取客户端电脑名:Page.Request.UserHostNam ...

  5. (转)客户端触发Asp.net中服务端控件事件

    第一章. Asp.net中服务端控件事件是如何触发的 Asp.net 中在客户端触发服务端事件分为两种情况: 一. WebControls中的Button 和HtmlControls中的Type为su ...

  6. JSR-303 Bean Validation 介绍及 Spring MVC 服务端验证最佳实践

    任何时候,当要处理一个应用程序的业务逻辑,数据校验是你必须要考虑和面对的事情. 应用程序必须通过某种手段来确保输入参数在上下文来说是正确的. 分层的应用在很多时候,同样的数据验证逻辑会出现在不同的层, ...

  7. C#在服务端验证客户端证书(Certificate)

    使用https协议进行通讯的时候可以设置双向证书认证,客户端验证服务端证书的方法前面已经介绍过了,现在说一下在服务端验证客户端证书的方案. 这里给出的方案比较简单,只需要在Service端的配置文件中 ...

  8. Vue.js与 ASP.NET Core 服务端渲染功能整合

    http://mgyongyosi.com/2016/Vuejs-server-side-rendering-with-aspnet-core/ 原作者:Mihály Gyöngyösi 译者:oop ...

  9. Easyui validatebox后台服务端验证

    Easyui validatebox的验证提示十分好用,可是在实际项目的运用中,经常会遇到需要服务器验证后并返回验证结果信息,比如验证用户名.手机号.邮箱是否已存在.于是就想着怎么拓展Easyui的验 ...

随机推荐

  1. HTML学习---HTML状态码

    301 Moved Permanently 永久移动.请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI.今后任何新的请求都应使用新的URI代替302 Found ...

  2. 乘风破浪:LeetCode真题_012_Integer to Roman

    乘风破浪:LeetCode真题_012_Integer to Roman 一.前言 经过了前面的思维训练,我们在某些方面有了一定的提高,但是对于实际的问题,要在短时间内得到答案,还是需要我们多多的练习 ...

  3. LeetCode算法题 菜鸟总结

    近期准备抽出一点时间,刷一些题防止手生,毕竟codemonkey,吃饭的手艺不能忘. ······································· 基本的题目都是基于java语言解答 ...

  4. C/S结构软件测试要点汇总

    C/S结构测试要点   1.安装/卸载: 1.安装包:完整性,安装包大小是否达到要求,显示基本信息是否正确,步骤是否明确,内容是否合理. 2.首次安装: 1)是否与其他已安装的软件冲突. 2)各种杀毒 ...

  5. error MSB8031: Building an MFC project for a non-Unicode character set is deprecated. You must change the project property to Unicode or download an additional library. See http://go.microsoft.co

    Win10,也重新装了免费版的Visual Studio 2013 y,写MFC程序时候发现这样的提示: error MSB8031: Building an MFC project for a no ...

  6. Python中readline()函数 去除换行符

    从Python中readline()函数读取的一行内容中含有换行符\n,很多时候我们需要处理不含有换行符的字符串,此时就要去掉换行符\n. 方法是使用strip()函数. 例子如下: f = open ...

  7. java中JVM的原理重温【转】

    一.基础理论知识 1.java虚拟机的生命周期: Java虚拟机的生命周期 一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序.程序开始执行时他才运行,程序结束时他就停止.你在同一台机器上 ...

  8. 程序人生:01如何做到招聘要求中的“要有扎实的Java基础”

    本文摘自左潇龙博客,原文出处:http://www.zuoxiaolong.com/html/article_232.html 来历 本文来自于一次和群里猿友的交流,具体的情况且听LZ慢慢道来. 一日 ...

  9. Presentation 常用的承接句——技术分享、学术报告串联全场不尴尬

    前言 现在即使是搞技术,做科研的,也需要在不同的场合,用ppt来做分享,做汇报,做总结. 如果国际会议,研讨会,或者在外企,国外工作,英文的presentation就更加必不可少.英语的提升需要大家从 ...

  10. [Python 多线程] 详解daemon属性值None,False,True的区别 (五)

    本文以多个例子介绍Python多线程中daemon属性值的区别. 回顾: 前面的文章简单介绍了在现代操作系统中,每一个进程都认为自己独占所有的计算机资源. 或者说线程就是独立的王国,进程间是相对独立的 ...