博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MVC4数据注释与验证
阅读量:4649 次
发布时间:2019-06-09

本文共 6478 字,大约阅读时间需要 21 分钟。

Using Validation Annotations

Required必须项验证属性

[Required]public string FirstName { get; set; }[Required]public string LastName { get; set; }

StringLength长度

[Required][StringLength(160)]public string LastName { get; set; }
[Required][StringLength(160, MinimumLength=3)]public string FirstName { get; set; }

RegularExpression正则表达式

[RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}")]public string Email { get; set; }

Range数字范围

[Range(35,44)]public int Age { get; set; }
[Range(typeof(decimal), "0.00", "49.99")]public decimal Price { get; set; }

Validation Attributes from System.Web.Mvc远程验证

[Remote("CheckUserName", "Account")]public string UserName { get; set; }
public JsonResult CheckUserName(string username){var result = Membership.FindUsersByName(username).Count == 0;return Json(result, JsonRequestBehavior.AllowGet);}

匹配验证

[RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}")]public string Email { get; set; }[Compare("Email")]public string EmailConfirm { get; set; }

Custom Error Messages and Localization自定义错误消息和本地化

[RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}",ErrorMessage="Email doesn't look like a valid email address.")]public string Email { get; set; }
[Required(ErrorMessage="Your last name is required")][StringLength(160, ErrorMessage="Your last name is too long")]public string LastName { get; set; }
[Required(ErrorMessage="Your {0} is required.")][StringLength(160, ErrorMessage="{0} is too long.")]public string LastName { get; set; }
[Required(ErrorMessageResourceType=typeof(ErrorMessages),ErrorMessageResourceName="LastNameRequired")][StringLength(160, ErrorMessageResourceType = typeof(ErrorMessages),ErrorMessageResourceName = "LastNameTooLong")]public string LastName { get; set; }

Looking behind the Annotation Curtain

Validation and Model Binding验证模型绑定

[HttpPost]public ActionResult Create(Album album){// the album parameter was created via model binding// ..}
[HttpPost]public ActionResult Edit(int id, FormCollection collection){var album = storeDB.Albums.Find(id);if(TryUpdateModel(album)){// ...}}

Validation and Model State验证模型状态

ModelState.IsValid == falseModelState.IsValidField("LastName") == falseModelState["LastName"].Errors.Count > 0

验证失败的信息

var lastNameErrorMessage = ModelState["LastName"].Errors[0].ErrorMessage;

VIEW验证

@Html.ValidationMessageFor(m => m.LastName)

Controller Actions and Validation Errors控制器验证错误信息

[HttpPost]public ActionResult AddressAndPayment(Order newOrder){if (ModelState.IsValid){newOrder.Username = User.Identity.Name;newOrder.OrderDate = DateTime.Now;storeDB.Orders.Add(newOrder);storeDB.SaveChanges();// Process the ordervar cart = ShoppingCart.GetCart(this);cart.CreateOrder(newOrder);return RedirectToAction("Complete", new { id = newOrder.OrderId });}// Invalid -- redisplay with errorsreturn View(newOrder);}

a啊

[HttpPost]public ActionResult AddressAndPayment(FormCollection collection){var newOrder = new Order();TryUpdateModel(newOrder);if (ModelState.IsValid){newOrder.Username = User.Identity.Name;newOrder.OrderDate = DateTime.Now;storeDB.Orders.Add(newOrder);storeDB.SaveChanges();// Process the ordervar cart = ShoppingCart.GetCart(this);cart.CreateOrder(newOrder);return RedirectToAction("Complete", new { id = newOrder.OrderId });}// Invalid -- redisplay with errorsreturn View(newOrder);}

CUSTOM VALIDATION LOGIC自定义验证逻辑

继承ValidationAttribute

using System.ComponentModel.DataAnnotations;namespace MvcMusicStore.Infrastructure{public class MaxWordsAttribute : ValidationAttribute{}}

重写 IsValid

public class MaxWordsAttribute : ValidationAttribute{protected override ValidationResult IsValid(object value, ValidationContext validationContext){return ValidationResult.Success;}}

完整自定义验证代码

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.ComponentModel.DataAnnotations;namespace Mvc4.Infrastructure{    public class MaxWordsAttribute : ValidationAttribute    {        public MaxWordsAttribute(int maxWords)            : base("{0} has too many words.")        {            _maxWords = maxWords;        }        protected override ValidationResult IsValid(        object value, ValidationContext validationContext)        {            if (value != null)            {                var valueAsString = value.ToString();                if (valueAsString.Split(' ').Length > _maxWords)                {                    var errorMessage = FormatErrorMessage(validationContext.DisplayName);                    return new ValidationResult(errorMessage);                }            }            return ValidationResult.Success;        }        private readonly int _maxWords;    }}

Model部分代码

[Required][StringLength(160)][MaxWords(10, ErrorMessage="There are too manywords in {
0}")]public string LastName { get; set; }

IValidatableObject模型中自定义验证类

using System;using System.Collections.Generic;using System.ComponentModel.DataAnnotations;using System.Linq;using System.Web;using Mvc4.Infrastructure;namespace Mvc4.Models{    public class Users : IValidatableObject    {        public IEnumerable
Validate(ValidationContext validationContext) { if (LastName != null && LastName.Split(' ').Length > 10) { yield return new ValidationResult("The last name has too many words!", new[] { "LastName" }); } } [Required] [StringLength(160)] public string LastName { get; set; } }}

Display

[Required][StringLength(160, MinimumLength=3)][Display(Name="First Name")]public string FirstName { get; set; }

自动生成编辑页面

Shipping Information@Html.EditorForModel()

Order控制字段顺序

[Required][StringLength(160)][Display(Name="Last Name", Order=15001)][MaxWords(10, ErrorMessage="There are too many words in {0}")]public string LastName { get; set; }[Required][StringLength(160, MinimumLength=3)][Display(Name="First Name", Order=15000)]public string FirstName { get; set; }

隐藏属性Scaff oldColumn,使用EditorForModel生效

[ScaffoldColumn(false)]public string Username { get; set; }

DisplayFormat格式化已短时间形式显示显示

[DisplayFormat(ApplyFormatInEditMode=true, DataFormatString="{0:d}")]public decimal Time{ get; set; }

ReadOnly只读属性,在页面上可以显示但无法将值传入控制器

[ReadOnly(true)]public decimal Total { get; set; }

DataType数据类型

[Required][DataType(DataType.Password)][Display(Name="Password")]public string Password { get; set; }

HiddenInput隐藏字段

转载于:https://www.cnblogs.com/aaa6818162/p/3565914.html

你可能感兴趣的文章
揭秘快速提升alexa排名的18种有效方法-2 -#来秀美#
查看>>
计算机专业及软件开发推荐书籍
查看>>
《Java程序设计》 课程教学
查看>>
Lambda--持续学习中
查看>>
简单谈谈面向对象和面向过程的区别
查看>>
Intellij IDEA 配置Tomcat远程调试
查看>>
python3 进程和线程(一)
查看>>
python-综合练习题(if条件语句,while循环,奇数偶数
查看>>
C语言基础-第三章
查看>>
PowerDesigner教程系列(一)概念数据模型
查看>>
python常用类库总结
查看>>
题解 CF962C 【Make a Square】
查看>>
只读数据文件损坏恢复
查看>>
k8s集群上线web静态网站
查看>>
【转】Impala和Hive的关系
查看>>
IDEA操作git
查看>>
windows 下安装elasticsearch
查看>>
C语言学习12:带参数的main函数,无指定的函数形参,调用库函数处理无指定的函数形参,...
查看>>
禁止某程序联网
查看>>
[LOJ6191][CodeM]配对游戏(概率期望DP)
查看>>