MVC学习手册之数据注解与验证

新建一个MVC5的WEB应用程序,VS2013会自动生成一段代码,以下是Account控制器下Register.cshtml 页面的代码:

@model WebApplication1.Models.RegisterViewModel
@{
ViewBag.Title = "注册";
} <h2>@ViewBag.Title。</h2> @using (Html.BeginForm("Register", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
@Html.AntiForgeryToken()
<h4>创建新帐户。</h4>
<hr />
@Html.ValidationSummary()
<div class="form-group">
@Html.LabelFor(m => m.UserName, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.TextBoxFor(m => m.UserName, new { @class = "form-control" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.Password, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.PasswordFor(m => m.Password, new { @class = "form-control" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.ConfirmPassword, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.PasswordFor(m => m.ConfirmPassword, new { @class = "form-control" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" class="btn btn-default" value="注册" />
</div>
</div>
} @section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}

aaarticlea/png;base64,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" alt="" />

可以看到,通过调用HTML辅助方法,可以很方便的生成我们想要的html代码,并提供很方便的数据验证功能。这里只是简单的举一些常用的特性:

    public class RegisterViewModel
{
[Required(ErrorMessage = "用户名是必须的")]
[Display(Name = "用户名")]
public string UserName { get; set; } [Required]
[StringLength(, ErrorMessage = "{0} 必须至少包含 {2} 个字符。", MinimumLength = )]
[DataType(DataType.Password)]
[Display(Name = "密码")]
public string Password { get; set; } [DataType(DataType.Password)]
[Display(Name = "确认密码")]
[Compare("Password", ErrorMessage = "密码和确认密码不匹配。")]
public string ConfirmPassword { get; set; }
}
  • Required 特性:用它标记的属性表示必须的,在数据验证时如果为空,则返回错误消息(通过 ErrorMessage 这个参数可以自定义返回的消息和消息类型)。
  • Display  特性:它标记的属性,在调用Html辅助方法时会读取它的 Name 参数的值并显示。如上面的LabelFor(m=>m.UserName)它返回的就是 Name 参数的值。
  • DataType 特性:它规定了所标记属性的数据显示类型, 在 DataType 这个枚举类型中定义了很多显示方式,如Password 表示以密码的方式显示,这样在用户输入密码时就不会以明文显示。
  • StringLength 特性:它规定了所标记属性的的长度范围,如 Password 这个属性的最大长度为100个字符。
  • Compare 特性:它修饰的属性可以与另一个属性相比较,如果它们的值相等,则返回true 否则为false ,如果为false 就返回 ErrorMessage 的值。如 ConfirmPassword 这个属性会自动与 Password 这个属性比较。
  • RegularExpression 特性:正则表达式,用它修饰的属性会通过它将属性的值转换为正则表达式,在于所给定的参数比较,如果不相符,就返回 ErrorMessage 的值。
  • Range 特性:它规定了所修饰的属性的值的可取值范围。如 [Range(34,43)]public int Age{get;set;} 那么Age的可取值为34到43,如果不在这个范围就返回 ErrorMessage 的值。
  • Remote 特性:它所修饰的属性可以与远端服务器进行验证。如 [Remote("CheckUserName","Account")]public string UserName{get;set;} 会将UserName属性的值返回到服务器,并通过 Account 控制器下的 CheckUserName(string username)方法来进行处理。

前面讲完了一些基本的用于数据验证的特性操作(这些特性也叫做注解),那么接下来就来讲讲如何创建自定的验证操作:

自定义注解需要从 ValidationAttribute 派生自己类,并重写一个版本的 IsValid() 方法。如下面的例子创建了一个自定义的最大化的单词数的注解(特性):

    public class MaxWordsAttribute : ValidationAttribute
{
private readonly int _maxWords; public MaxWordsAttribute(int maxWords):base("{0}的单词数过多!")
{
_maxWords = maxWords;
} protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value != null)
{
var valueAsString = value as string;
if (valueAsString.Split(' ').Length > _maxWords)
{
var errorMessage = FormatErrorMessage(validationContext.DisplayName);
return new ValidationResult(errorMessage);
}
}
return ValidationResult.Success;
}
}

通过空格将字符串分割为多个字符串,并计算子字符串的数目与限定的最大字符串数目比较,如果超过了限定,就返回 errorMessage 的值,在通过 FormatErrorMessage 方法重写了默认实现方式。

下面是被标记的UserName属性以及操作的结果:

        [MaxWords()]
[Required(ErrorMessage = "用户名是必须的")]
[Display(Name = "用户名")]
public string UserName { get; set; }

aaarticlea/png;base64,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" alt="" />

类似的我们可以自定义其它注解与验证方式。

参考资料: ASP.NET MVC 5 高级编程(第5版)

最新文章

  1. JVM-漫游
  2. Python3基础 casefold 将字符串中的所有字符变成小写
  3. java语法基础
  4. 常用的JavaScript模式
  5. CSS3之文本阴影text-shadow
  6. 【codevs1993】 草地排水
  7. 【ros bug】rplidar.launch is neither a launch file in package...
  8. SQL笔记-第三章,数据的增删改
  9. freeCodeCamp:Truncate a string
  10. 绕过D盾安全狗连接菜刀
  11. linux下软件安装的方法
  12. InnoDB的配置
  13. 一张图说清Asp.NET MVC中的 RenderPage、RenderBody、RenderSection
  14. 团队项目中js冲突
  15. Java中设计模式之生产者消费者模式-4
  16. ( 转 ) WebApiTestClient 的使用
  17. linux 自总结常用命令(centos系统)
  18. 使用dll,将image库开放出去
  19. linux上安装Qt4.8.6+QtCreator4.0.3
  20. Asia-Dhaka 2017

热门文章

  1. Liunx基础优化配置
  2. angular知识点总结
  3. P2264 情书 Trie匹配
  4. luogu1447 [NOI2010]能量采集 莫比乌斯反演
  5. 通过IDEA及hadoop平台实现k-means聚类算法
  6. charset=iso-8859-1
  7. kuangbin专题十六 KMP&amp;&amp;扩展KMP HDU3347 String Problem(最小最大表示法+kmp)
  8. 添加fping监控
  9. 江西财经大学第一届程序设计竞赛 G
  10. hdu2063 最大二分匹配(匈牙利算法)