写一个继承与ValidationAttribute类的自定义的验证方法

MVC中传递数据时,大多数都会用Model承载数据,并且在传到控制器后,对Model进行一系列的验证

我平时经常使用的判断方法比Low,因为Model都是不同的,也需要返回很多不同的信息,所以我都是把很多条件语句封装成私有方法,放在控制器的最下边,然后使用的时候直接调用。

下图就是我平时使用的代码格式,我把验证方法都写在了这里,很低级请轻喷。

其实在.Net MVC中,已经提供了很好的验证方法,就是在属性上面加ValidationAttribute标签的方法,如下图:

如果想要自定义验证的话就需要自己重写一下,下面是我写的简单自定义的验证方法

方法功能是对字符串形式的属性长度的验证。方法如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; using System.ComponentModel.DataAnnotations; namespace WebTest.Common.Utility
{
public class ValidateStrLengthAttribute : ValidationAttribute
{
public ValidateStrLengthAttribute(int minLength, int maxLength)
{
_minLength = minLength;
_maxLength = maxLength;
} /// <summary>
/// 最小值
/// </summary>
private int _minLength = ; /// <summary>
/// 最大值
/// </summary>
private int _maxLength = ; /// <summary>
/// 重写验证规则
/// </summary>
/// <param name="value">model中此属性的值(这里是登录密码的值)</param>
/// <param name="validationContext"></param>
/// <returns></returns>
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
string name = validationContext.DisplayName;//属性名称
string errorMessage = "";//错误信息 if (value == null)
{
errorMessage = " " + name + "不能为空";
}
else
{
string val = value.ToString(); if (string.IsNullOrEmpty(val))
{
errorMessage = " " + name + "不能为空";
}
else
{
if (val.Length >= _minLength && val.Length <= _maxLength)
{
return ValidationResult.Success;
}
else
{
errorMessage = " " + name + " 长度需在" + _minLength + "到" + _maxLength + "之间";
}
}
}
return new ValidationResult(errorMessage);
} }
}

下面我写一个小例子验证我的方法是否可用
登录为例。

Model代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; using System.ComponentModel.DataAnnotations; namespace WebTest.Models
{
public class LoginModel
{
/// <summary>
/// 用户名
/// </summary>
[Display(Name = "用户名")]
public string UserName { get; set; } /// <summary>
/// 密码
/// </summary>
[Display(Name = "密码")]
public string Pwd { get; set; }
}
}

控制器代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc; using WebTest.Models; namespace WebTest.Controllers
{
public class LoginController : Controller
{ public ActionResult Index()
{
return View();
} /// <summary>
/// 登录表单提交
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
[HttpPost]
public ActionResult Index(LoginModel model)
{
return View();
}
}
}

视图页代码:

@model WebTest.Models.LoginModel
@{
Layout = null;
} <!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
@using (@Html.BeginForm())
{
@Html.LabelFor(model => model.UserName)
@Html.TextBoxFor(model => model.UserName)
@Html.ValidationMessageFor(model => model.UserName)
<br />
@Html.LabelFor(model => model.Pwd)
@Html.TextBoxFor(model => model.Pwd)
@Html.ValidationMessageFor(model => model.Pwd)
<div>
<input type="submit" value="提交" />
</div>
}
</div>
</body>
</html>

最后出来的页面是这样子的(普通的form表单)

现在我可以把我的标签放到属性的上边方法名是ValidateStrLengthAttribute  标签名称是ValidateStrLength)需要引用下自定义验证方法的命名空间

如下图:

代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; using System.ComponentModel.DataAnnotations;
using WebTest.Common.Utility; namespace WebTest.Models
{
public class LoginModel
{
/// <summary>
/// 用户名
/// </summary>
[Display(Name = "用户名")]
[ValidateStrLength(, )]
public string UserName { get; set; } /// <summary>
/// 密码
/// </summary>
[Display(Name = "密码")]
[ValidateStrLength(, )]
public string Pwd { get; set; }
}
}

现在都写完了,点击提交试一下

例子完毕,如有问题,请多指正^_^。

在.Net MVC中自定义ValidationAttribute标签对Model中的属性做验证的更多相关文章

  1. 在Asp.Net MVC中实现RequiredIf标签对Model中的属性进行验证

    在Asp.Net MVC中可以用继承ValidationAttribute的方式,自定制实现RequiredIf标签对Model中的属性进行验证 具体场景为:某一属性是否允许为null的验证,要根据另 ...

  2. 在Asp.Net MVC中实现CompareValues标签对Model中的属性进行验证

    在Asp.Net MVC中可以用继承ValidationAttribute的方式,自定制实现Model两个中两个属性值的比较验证 具体应用场景为:要对两个属性值的大小进行验证 代码如下所示: /// ...

  3. CompareValues标签对Model中的属性进行验证

    在Asp.Net MVC中实现CompareValues标签对Model中的属性进行验证   在Asp.Net MVC中可以用继承ValidationAttribute的方式,自定制实现Model两个 ...

  4. 6.2 dubbo在spring中自定义xml标签源码解析

    在6.1 如何在spring中自定义xml标签中我们看到了在spring中自定义xml标签的方式.dubbo也是这样来实现的. 一 META_INF/dubbo.xsd 比较长,只列出<dubb ...

  5. 6.1 如何在spring中自定义xml标签

    dubbo自定义了很多xml标签,例如<dubbo:application>,那么这些自定义标签是怎么与spring结合起来的呢?我们先看一个简单的例子. 一 编写模型类 package ...

  6. mvc中动态给一个Model类的属性设置验证

    原文:mvc中动态给一个Model类的属性设置验证 在mvc中有自带的验证机制,比如如果某个字段的类型是数字或者日期,那么用户在输入汉字或者英文字符时,那么编译器会自动验证并提示用户格式不正确,不过这 ...

  7. Android中自定义ListView无法响应OnItemClickListener中的onItemClick方法问题解决方案

    如果你的自定义ListViewItem中有Button或者Checkable的子类控件的话,那么默认focus是交给了子控件,而ListView 的Item能被选中的基础是它能获取Focus,也就是说 ...

  8. oracle中自定义type、以及java中传递list到过程中的例子

    在java开发过程中有时候为了处理数据的速度更快,会把要处理的数据组装成list,把list作为过程的一个参数,在过程中批量处理,下面就以一个例子做简单的阐述,以此谨记. --药品目录智能审核 --说 ...

  9. spring mvc 中自定义404页面在IE中无法显示favicon.ico问题的解决方法。

    此处用的是jsp,控制层用的是ModelAndView, 具体解决方法如下: @RequestMapping(value = "notfound", method = Reques ...

随机推荐

  1. 如何利用.Net内置类,解析未知复杂Json对象

    如何利用.Net内置类,解析未知复杂Json对象 如果你乐意,当然可以使用强大的第三方类库Json.Net中的JObject类解析复杂Json字串 . 我不太希望引入第三方类库,所以在.Net内置类J ...

  2. Java笔记:Java集合概述和Set集合

    本文主要是Java集合的概述和Set集合 1.Java集合概述 1)数组可以保存多个对象,但数组长度不可变,一旦在初始化数组时指定了数组长度,这个数组长度就是不可变的,如果需要保存数量变化的数据,数组 ...

  3. mssql分页原理及效率分析

    下面是常用的分页,及其分页效率分析. 1.分页方案一:(利用Not In和SELECT TOP分页) 语句形式: SELECT TOP 10 * FROM TestTable WHERE (ID NO ...

  4. WebAPI的压缩

    看见老外写了一篇ASP.NET Web API GZip compression ActionFilter with 8 lines of code 说实话被这标题吸引了,8行代码实现GZip压缩过滤 ...

  5. nginx反射理传apache配置 - cookie去哪儿了?

    在公司接手了个微信项目,由于微信环境下访问网站需要使用对外开放的域名,所以有相关问题,都是直接运维同事帮忙处理. 原理是这样: 方案一: 1. 将域名解析指向测试服务器的地址: 2. 开放相关端口访问 ...

  6. 创建基本的2D场景(part1)

    通过一个简单的2D游戏案例来学习unity 2D游戏开发,本文分为以下3个部分. · 创建工作层 · 添加静态景物 · 制作2D动画 通过这个案例,我们可以学习到unity2D游戏制作的基本流程,Sp ...

  7. Angular2中的Service并不是单例模式

    2015年做了一个使用angularjs 1框架的项目,2016年伊始公司的项目转为使用Angular2框架. 在开发过程中发现了一个坑,这个坑就是在Angular JS 1.x中的Service是单 ...

  8. Javaweb 第2天 JavaScript课程

    JavaScript课程 两日大纲 ● JavaScript基本语法 ● JavaScript函数 ● JavaScript基于对象编程 ● JavaScript BOM对象编程 ● JavaScri ...

  9. 学习OpenCV,看这些!

    OpenCV简介: OpenCV 是一款功能强大的跨平台计算机视觉开源库,可以用于解决人机交互.物体检测.人脸识别等领域的问题.库本身是采用 C++ 编写的,但是同时也对 Python, Java, ...

  10. JS代码:设为首页 加入收藏

    // JavaScript Document // 加入收藏 <a onclick="AddFavorite(window.location,document.title)" ...