写一个继承与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. Rustlang语言逐行处理文件的基本方法

    文件操作 需求: 将文件中的内容按行读取出来,然后对改行的数据进行处理,最后将处理后的行数据存放到新的文件中. 使用RUST来处理的方法如下. 首先引入需要的标准库: use std::io::pre ...

  2. map 类型

    map 是键-值对的集合.map 类型通常可理解为关联数组(associative array): 可使用键作为下标来获取一个值,正如内置数组类型一样.而关联的本质在于元素的值与某个特定的键相关联,而 ...

  3. 32位Win7下安装与配置PHP环境(二)

    本安装实例中用到的三个软件,都可以直接从官网下载,为了方便,也可以直接从本人的CSDN资源中打包下载. 三个安装文件如图示: CSDN高速下载地址: http://download.csdn.net/ ...

  4. 两个80c51单片机之间怎样进行串行通信

    以前以为串行通信只能是单片机和PC机之间进行通信,昨天无意之中看到一个程序,是单片机和单片机之间进行通信..这小东西真是神奇啊!昨天弄了很长时间没弄出来,今天在大神的帮助下终于拨开云雾见天日了. 案例 ...

  5. html5 PACS漫谈

    2012年html5标准制定之后,其中canvas标签给程序猿提供了图像绘制的接口. 在医疗领域从事PACS开发的我发现BS结构的PACS系统开发有了新可能,不再需要客户端安装flash.active ...

  6. C#基础知识——类的继承

    继承是C#的三大特性之一,它实现了多态性和代码复用 我们可能会在一些类中,写一些重复的成员,我们可以将这些重复的成员,单独的封装到一个类中,作为这些类的父类. Student.Teacher.Driv ...

  7. Android之WebView网页滚动截图

    WebView 网页滚动截屏,可对整个网页进行截屏而不是仅当前屏幕哦! 注意若Web页面存在position:fixed; 的话得在调用前设置为 position:absolute; 哦,否则会出现很 ...

  8. 【JS学习笔记】函数传参

    比如仅仅改变背景的颜色 函数传参:参数就是占位符. 那么在什么时候用传参呢?函数里定不下来的东西. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1 ...

  9. C#23种开发模式,陆续完善中

    #region 单例模式 #region 线程非安全单例模式 public class Singleton1 { private Singleton1() { } private static Sin ...

  10. kibana使用的lucene查询语法

    kibana在ELK阵营中用来查询展示数据elasticsearch构建在Lucene之上,过滤器语法和Lucene相同 kibana4官方演示页面 全文搜索 在搜索栏输入login,会返回所有字段值 ...