MVC3 Model Binding验证方式
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验证方式的更多相关文章
- ASP.NET MVC3 Model验证总结 @Html.ValidationSummary(true)
http://www.wyjexplorer.cn/Post/2012/8/3/model-validation-in-aspnet-mvc3 ASP.NET MVC3中的Model是自验证的,这是通 ...
- ASP.NET MVC3 Model验证总结
ASP.NET MVC3中的Model是自验证的,这是通过.NET4的System.ComponentModel.DataAnnotations命名空间完成的. 我们要做的只是给Model类的各属性加 ...
- ASP.NET MVC3 Model验证总结(转)
推荐: ASP.NET MVC的Model元数据与Model模板:预定义模板 http://www.cnblogs.com/artech/archive/2012/05/02/model-meta ...
- 转:ASP.NET MVC3 Model验证总结
http://www.wyjexplorer.cn/Post/2012/8/3/model-validation-in-aspnet-mvc3 ASP.NET MVC3中的Model是自验证的,这是通 ...
- 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 ...
- 理解ASP.NET Core - 模型绑定&验证(Model Binding and Validation)
注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 模型绑定 什么是模型绑定?简单说就是将HTTP请求参数绑定到程序方法入参上,该变量可以是简单类 ...
- Model的验证
ModelValidator与ModelValidatorProvider ModelValidator public abstract class ModelValidator { public v ...
- asp.net mvc3 的数据验证(一)
原文:asp.net mvc3 的数据验证(一) 对于web开发人员来说,对用户输入的信息进行验证是一个重要但是繁琐的工作,而且很多开发者都会忽略.asp.net mvc3框架使用的是叫做“ ...
- C# 中参数验证方式的演变
一般在写方法的时候,第一步就是进行参数验证,这也体现了编码者的细心和缜密,但是在很多时候这个过程很枯燥和乏味,比如在拿到一个API设计文档的时候,通常会规定类型参数是否允许为空,如果是字符可能有长度限 ...
随机推荐
- ASP.Net 获取当前时间,包含各种时间格式
在c# / ASP.net中我们可以通过使用DataTime这个类来获取当前的时间.通过调用类中的各种方法我们可以获取不同的时间:如:日期(2008-09-04).时间(12:12:12).日期+时间 ...
- 【学习笔记】【C语言】标识符
1. 什么是标识符 标识符就是在程序中自定义的一些符号和名称.要跟关键字区分开来:关键字是C语言默认提供的符号,标识符是程序员自定义的 2. 标识符的作用 1) 标识符,从字面上理解就是用来标识某些东 ...
- 使用DbVisualizer 8 连接Oracle数据库
1. 网上下载一个驱动包ojdbc14.jar,放到oracle目录下:...\DbVisualizer-8.0.1\jdbc\oracle\ojdbc14.jar 2. 打开 DbVisualize ...
- iOS Foundation框架 -4.NSDate类的简单用法
NSDate为日期时间类对象,简单操作: 注意:直接NSLog输出NSDate对象,默认是以0时区为标准,因此会比北京时间少8小时 1.将Date格式转换为自定义格式的字符串格式 // 自定义Date ...
- 全面解析SQL SERVER 的左右内连接
SQL SERVER数据库的三种常用连接解析: 这里先给出一个官方的解释: left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右 ...
- JQ中的html()、text()、val()的用法
<input type="text" val=""> 用val(); <sapn>你好</sapn> 用text() &l ...
- JAVA多线程学习3--线程一些方法
一.通过sleep方法睡眠 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行).该线程不丢失任何监视器的所属权. 二.线程优先级 线程具有优先级,范围为1-10. MAX_PRIORITY线程可以具 ...
- 为 WordPress 标签添加 rel="nofollow" 属性
WordPress 标签默认并无 rel="nofollow" 属性.rel="nofollow" 属性的作用是:告诉搜索引擎,无需追踪目标页,禁止蜘蛛爬行和传 ...
- JavaScript移除数组元素减少长度的方法
JavaScript移除数组元素减少长度的方法,代码如下: //数组移除长度方法 var array=[]; array[0]="张三"; array[1]="李四& ...
- python杂记-5(装饰器)
1.被装饰的函数有参数(一个参数): def w1(func): def inner(arg): # 验证1 # 验证2 # 验证3 return func(arg) return inner @w1 ...