1、使用ModelState在Action中进行验证

[HttpPost]
public ViewResult MakeBooking(Appointment appt) {
if (string.IsNullOrEmpty(appt.ClientName)) {
ModelState.AddModelError("ClientName", "Please enter your name");
}
if (ModelState.IsValidField("Date") && DateTime.Now > appt.Date) {
ModelState.AddModelError("Date", "Please enter a date in the future");
}
if (!appt.TermsAccepted) {
ModelState.AddModelError("TermsAccepted", "You must accept the terms");
}
if (ModelState.IsValid) {
return View("Completed", appt);
} else {
return View();
}
}

2、Model元数据验证
[DisplayName("用户名")]
[Required(ErrorMessage = "请输入用户名")]
public string UserName { get; set; } [DisplayName("是否删除")]
[Required]
public int? IsDelete { get; set; } [DisplayName("用户状态")]
[Required]
public int? UserStatus { get; set; } [DisplayName("初始日期")]
[Required]
[DataType(DataType.Date)]
[DateRange("2014-03-01", "2014-05-01")]
public DateTime? BirthDate { get; set; } [DisplayName("创建日期")]
[Required]
[DataType(DataType.Date)]
public DateTime? CreateTime { get; set; }
自定义验证,主要是实现ValidationAttribute类的IsValid方法,下面的类定义了对输入时间范围的验证
public class DateRangeAttribute : ValidationAttribute
{
private string begin;
private string end;
public DateRangeAttribute(string begin, string end)
{
this.begin = begin;
this.end = end;
} public override bool IsValid(object value)
{
DateTime dtBegin;
DateTime dtEnd;
DateTime dtValue; if (value == null || !DateTime.TryParse(value.ToString(), out dtValue))
{
ErrorMessage = "错误的输入日期格式";
return false;
} if (!DateTime.TryParse(begin.ToString(), out dtBegin))
{
ErrorMessage = "错误的开始日期格式";
return false;
} if (!DateTime.TryParse(end.ToString(), out dtEnd))
{
ErrorMessage = "错误的结束日期格式";
return false;
} if (dtValue < dtBegin || dtValue > dtEnd)
{
ErrorMessage = string.Format("输入日期必须大于{0}并且大于{1}", begin.ToString(), end.ToString());
return false;
} return true;
//return base.IsValid(value);
}
 
3、实现IValidatableObject接口,实现单独方法验证

 public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
UserInfoViewModel userInfo = validationContext.ObjectInstance as UserInfoViewModel; if (null == userInfo)
{
yield break;
} if (string.IsNullOrEmpty(userInfo.UserName))
{
yield return new ValidationResult("'UserName'是必需字段", new string[] { "UserName" });
}
if (userInfo.UserName != "")
{
yield return new ValidationResult("'UserName'必须为123", new string[] { "UserName" });
}
}
4、启动客户端验证
4.1 配置文件

<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />

4.2 View

@Html.ValidationSummary(true)

@Html.LabelFor(m => m.BirthDate):
@Html.EditorFor(m => m.BirthDate)
@Html.ValidationMessageFor(m => m.BirthDate)

 4.3 生成的Html代码
<input class="text-box single-line input-validation-error" data-val="true" data-val-number="字段 是否删除 必须是一个数字。" data-val-required="是否删除 字段是必需的。" id="IsDelete" name="IsDelete" type="text" value="0">

MVC3 Model Binding验证方式的更多相关文章

  1. ASP.NET MVC3 Model验证总结 @Html.ValidationSummary(true)

    http://www.wyjexplorer.cn/Post/2012/8/3/model-validation-in-aspnet-mvc3 ASP.NET MVC3中的Model是自验证的,这是通 ...

  2. ASP.NET MVC3 Model验证总结

    ASP.NET MVC3中的Model是自验证的,这是通过.NET4的System.ComponentModel.DataAnnotations命名空间完成的. 我们要做的只是给Model类的各属性加 ...

  3. ASP.NET MVC3 Model验证总结(转)

    推荐:   ASP.NET MVC的Model元数据与Model模板:预定义模板 http://www.cnblogs.com/artech/archive/2012/05/02/model-meta ...

  4. 转:ASP.NET MVC3 Model验证总结

    http://www.wyjexplorer.cn/Post/2012/8/3/model-validation-in-aspnet-mvc3 ASP.NET MVC3中的Model是自验证的,这是通 ...

  5. ASP.NET MVC3 Dynamically added form fields model binding

    Adding  new Item to a list of items, inline is a very nice feature you can provide to your user. Thi ...

  6. 理解ASP.NET Core - 模型绑定&验证(Model Binding and Validation)

    注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 模型绑定 什么是模型绑定?简单说就是将HTTP请求参数绑定到程序方法入参上,该变量可以是简单类 ...

  7. Model的验证

    ModelValidator与ModelValidatorProvider ModelValidator public abstract class ModelValidator { public v ...

  8. asp.net mvc3 的数据验证(一)

    原文:asp.net mvc3 的数据验证(一)      对于web开发人员来说,对用户输入的信息进行验证是一个重要但是繁琐的工作,而且很多开发者都会忽略.asp.net mvc3框架使用的是叫做“ ...

  9. C# 中参数验证方式的演变

    一般在写方法的时候,第一步就是进行参数验证,这也体现了编码者的细心和缜密,但是在很多时候这个过程很枯燥和乏味,比如在拿到一个API设计文档的时候,通常会规定类型参数是否允许为空,如果是字符可能有长度限 ...

随机推荐

  1. Java之简单图形面积计算

    设计一个类层次,定义一个抽象类--形状(类名:shape).其中包括求形状的面积抽象方法(方法名:calArea()).继承该抽象类定义三角形(Triangle).矩形(Rectangle).圆(Ci ...

  2. jQuery 删除或是清空某个HTML元素示例

    jQuery使用下面两个方法来删除或是清空某个HTML元素. remove() – 删除指定的元素(包括其子元素)empty() – 清空指定元素的子元素 1.remove()  <!DOCTY ...

  3. jqure获取单选按钮的值(比如性别)

    使用jquery获取radio的值,最重要的是掌握jquery选择器的使用,在一个表单中我们通常是要获取被选中的那个radio项的值,所以要加checked来筛选,比如有以下的一些radio项: 1. ...

  4. QQ截图工具提取

    今晚关了QQ,突然想截个图,但是呢又不想打开QQ了,于是在网上搜索截图工具,下载了几个,感觉都没有QQ截图好用.索性直接百度QQ截图工具提取,看到有些网站上有提取的,里面的文件有点多,不是我中意的,突 ...

  5. C语言算法系列---1.队列和栈

    写在前面:在家玩了好久,实在是不知道干嘛了,突然想找些事做,现在是时候做些什么了.这些东西不见得多高深,也可能很简单,但很基础,也无法忽视.同时,也是自己学习走过的一条路. 这是开头,就写写C的队列和 ...

  6. JS input文本框禁用右键和复制粘贴功能的代码

    代码如下: function click(e) { if (document.all) { ||||) { oncontextmenu='return false'; } } if (document ...

  7. 一款非常炫酷的jQuery动态随机背景滚动特效

    一款非常炫酷的jQuery动态随机背景滚动特效 图片背景会不停息的滚动,带有那种漂浮的视觉效果,小圈圈飘动. 更好的是还兼容IE6浏览器,大伙可以好好研究研究. 适用浏览器:IE6.IE7.IE8.3 ...

  8. php正则表达式总结第1弹

    介绍几个我用到的php正则表达式 1. 一篇文章的链接,我需要去掉以 /hotels/打头的链接,可用下面正则 $content = preg_replace('/<a(.*?)href=&qu ...

  9. PHP获取当前日期或指定日期的所在月的第一天和最后一天

    <?php function getthemonth($date) { $firstday = date('Y-m-01', strtotime($date)); $lastday = date ...

  10. 使用 Visual Studio Team Test 进行单元测试和java中的测试

    C#中test测试地 方法一. 1.从NUnit官网(http://www.nunit.org/index.php)下载最新版本NUnit,当前版本为NUnit2.5.8. 2.安装后,在VS2008 ...