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. JSP之错误信息提示

    MessageResource.properties配置文件: RegisterAction注册: package com.caiduping.action; import javax.servlet ...

  2. 1 对WinMain的理解

    就像C语言的main是它的程序路口一样,windows的程序入口是WinMain,WinMain的定义可以查看winbase.h文件. Hello Windows(c语言中的Hello world!) ...

  3. 找不到命名空间命名空间:System.Windows.Forms

    System.Windows.Forms在system.windows.forms.dll中.需要添加引用.在解决方案资源管理器中的引用上单击右键,选择添加引用.找到System.windows.fo ...

  4. iOS 中对各种视图的截屏以及分享

    1.一个第三方的工具,主要是对表视图.滚动视图.视图的扩展,用法也很简单 image = [tableview screenshot]; 2.然后将截的图片分享出去,在分享的时候,因为多个地方用到了截 ...

  5. 网站添加到IIS和附件进程调试(新手使用篇)

    一.网站添加到IIS 做网站开发,很有必要把项目添加到IIS中,这对浏览和后期的调试很有帮助.怎么把网站添加到IIS上? 1). 打开IIS,然后操作步骤如下图: 选择Default Web Site ...

  6. 为apache与mysql创建快捷方式

    为apache与mysql创建快捷方式 1)为apache创建快捷方式(软链接) 以后我们就可以在终端的任一位置,使用apachectl start|stop|restart   2)为mysql创建 ...

  7. SecureCRT相关设置

    Technorati 标签: SecureCRT,设置 1.  使用SecureCRT对Linux vim进行颜色设置 Linux的控制台颜色很好设置:Options ->Session Opt ...

  8. 在线生成ICO图标、站标

    网上一搜有很多,找了两个比较好用的,分别是http://ico.storyren.com/和http://www.ico.la/,前面的那个好像更好点.上传png.jpg.或gif格式的图片,按自己需 ...

  9. iframe整理学习笔记

    朋友问了一个比较怪的问题,iframe下自适应的问题,因为很少使用iframe的原因,怀着对iframe的疑惑采用了一点点实践;以下frame表示针对的iframe元素 解决的方法:对iframe进行 ...

  10. Bundle、Intent、SharedPreferences

    Intent与Bundle的共同点:都继承Parcelable Intent传值与Bundle传值的区别 eg:我现在要从A界面   跳转到B界面或者C界面   这样的话 我就需要写2个Intent  ...