将验证规则写在Cotroller里不是一个好办法,这样会显得代码很啰嗦,更重要的是将业务逻辑写入Controller,使得Controller变得更“重”,不符合设计原则。更好的办法是使用验证注解属性,这些属性用于模型类中。
打开Message类,添加注解属性。
using System.ComponentModel.DataAnnotations;
namespace MessageBoard.Models { public class Message { [Required(ErrorMessage = "昵称不能为空")] public string NickName { set; get; } [Required(ErrorMessage = "内容不能为空")] [MinLength(15,ErrorMessage = "内容不能少于15字")] public string Content { set; get; } public DateTime ReleaseDate { set; get; } } }
数据注解特性定义在名称空间System.ComponentModel.DataAnnotations中,常用的注解特性包括
属性名称 | 描述 |
Required | 标识该属性为必需参数,不能为空 |
StringLength | 标识该字符串有长度限制,可以限制最小或最大长度 |
Range | 标识该属性值范围,通常被用在数值型和日期型 |
RegularExpression | 标识该属性将根据提供的正则表达式进行对比验证 |
CustomValidation | 标识该属性将按照用户提供的自定义验证方法,进行数值验证 |
接下来删除在Write动作方法中的验证代码。
[HttpPost] public ActionResult Write(Message message) { if (ModelState.IsValid) { message.ReleaseDate = DateTime.Now;
messages.Add(message); return RedirectToAction("Index"); } else { return View(message); } }
现在Write方法看起来简洁多了。页面运行结果与上一节一致,但程序代码简洁优雅了许多,所以使用数据注解完成验证功能是我们主要的手段。