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设计文档的时候,通常会规定类型参数是否允许为空,如果是字符可能有长度限 ...
随机推荐
- SQL 存储过程 执行效率优化提升 (显示估计)
在sql server 查询区 通过执行 "显示估计的执行计划" ,可以给出 存储过程 缺少索引的提示,并自动生成建立相应 索引 的代码 显示估计的执行计划 执行结果提示: 哦,算 ...
- 英特尔实感SDK 代码示例
原文地址 摘要 本套代码示例针对巴西英特尔实感动手实验室创建,旨在帮助参与人员了解如何使用英特尔® 实感™ 软件开发套件. 12 个示例使用 C# SDK 包装程序,提供了简单的基于控制台的应用,支持 ...
- 百度编辑器ueditor代码高亮效果前台不显示的解决方法
原因是你没有在你的内容页加载相应的css文件,这要如何解决呢? 经测试,只要插入以下两个文件即可解决问题: <link href="你的ueditor路径/ueditor/third- ...
- 关于柯尼卡美能达bizhub250出现c2557错误解决方法
打印机出现c2557代码的操作方法 1. 按效用/计数器键 英文是(Utility/Counter) 2. 看到有检查细息(Check Detail) 3. ...
- 最新13个加速 Web 开发的框架和工具
我们为开发人员挑选了15个最新的Web开发框架,你肯定尝试一下这些新鲜的框架,有的可能略微复杂,有的提供了很多的配置选项,也有一些窗口小部件和界面交互的选择.他们将帮助你创建更优秀的网站,提供给用户更 ...
- EF调用函数日期查询
q = q.Where(t => System.Data.Entity.SqlServer.SqlFunctions.DateDiff("dd", t.Date, dDate ...
- Android studio 读取properties文件
System.out.println(Thread.currentThread().getContextClassLoader().getResource("").getPath( ...
- iTerm2 颜色配置
1. 首先找到配色文件: iterm2官网配色方案iTerm2-Color-Schemes altercation的 solarized配色方案solarized 2. 配置步骤: clone上面的 ...
- mongodb的常用操作(三)
继续mongodb的学习和总结: 11.mongodb的mapreduce功能 mapreduce可以说是mongodb的一个很强大的功能,可以实现复杂的运算和统计,做一个简要的总结: 假设有user ...
- 社区发现算法问题&&NetworkX&&Gephi
在做东西的时候用到了社区发现,因此了解了一下有关社区发现的一些问题 1,社区发现算法 (1)SCAN:一种基于密度的社团发现算法 Paper: <SCAN: A Structural Clust ...