架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 14659|回复: 0

[ASP.NET] Asp.net core 模型数据验证

[复制链接]
发表于 2019-11-21 10:49:51 | 显示全部楼层 |阅读模式
用法同Asp.net MVC类似。实质上在UI层加了一层js验证,在控制器加了一层后台验证。
UI层js验证是引用两个js脚本起作用

  1. <script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.17.0/jquery.validate.min.js"
  2.         asp-fallback-src="~/lib/jquery-validation/dist/jquery.validate.min.js"
  3.         asp-fallback-test="window.jQuery && window.jQuery.validator"
  4.         crossorigin="anonymous"
  5.         integrity="sha384-rZfj/ogBloos6wzLGpPkkOr/gpkBNLZ6b6yLy4o+ok+t/SAKlL5mvXLr0OXNi1Hp">
  6. </script>
  7. <script src="https://ajax.aspnetcdn.com/ajax/jquery.validation.unobtrusive/3.2.9/jquery.validate.unobtrusive.min.js"
  8.         asp-fallback-src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"
  9.         asp-fallback-test="window.jQuery && window.jQuery.validator && window.jQuery.validator.unobtrusive"
  10.         crossorigin="anonymous"
  11.         integrity="sha384-ifv0TYDWxBHzvAk2Z0n8R434FL1Rlv/Av18DXE43N/1rvHyOG4izKst0f2iSLdds">
  12. </script>
复制代码
如果不引用这个脚本,前端html页面验证不起作用。
验证的提示信息通过Tag helper 的 asp-validation-for,如:<span asp-validation-for="Rating" class="text-danger"></span>
验证失败时,提示信息自动加入到span标签文本中。

具体示例

1创建一个要验证的类型

  1. public class Movie
  2.    {
  3.        public int ID { get; set; }

  4.        [StringLength(60, MinimumLength = 3)]
  5.        [Required]
  6.        public string Title { get; set; }

  7.        [Display(Name = "放映日期")]
  8.        [DataType(DataType.Date)]
  9.        [Range(typeof(DateTime), "1/1/1966", "1/1/2020")]
  10.        public DateTime ReleaseDate { get; set; }

  11.        [Range(1, 100)]
  12.        [DataType(DataType.Currency)]
  13.        public decimal Price { get; set; }

  14.        [RegularExpression(@"^[A-Z]+[a-zA-Z''-'\s]*$")]
  15.        [Required]
  16.        [StringLength(30)]
  17.        public string Genre { get; set; }

  18.        [RegularExpression(@"^[A-Z]+[a-zA-Z''-'\s]*$")]
  19.        [StringLength(5)]
  20.        [Required]
  21.        public string Rating { get; set; }
  22.    }
复制代码
Required 特性表示属性不能为空,但不能校验空格
值类型(如decimal, int, float, DateTime) 本身是必须的,并不需要 [Required] 特性。
Range 特性限制值在指定的范围内。
StringLength 特性可让你设定字符串最大长度,以及最小长度(可选)。
RegularExpression特性校验正则表达式。

[Compare("Password", ErrorMessage = "两次输入的密码不一致")]
[Display(Name = "确认密码")]
[DataType(DataType.Password)]

常见内置验证属性:
[CreditCard]:验证属性是否为信用卡格式
[Compare]:验证模型中的两个属性是否匹配
[EmailAddress]:验证属性是否为电子邮件格式
[Phone]:验证属性是否为电话号码格式
[Range]:验证属性值是否在给定范围内
[RegularExpression]:验证数据是否与指定的正则表达式匹配
[Required]:必填的属性
[StringLength]:验证字符串属性的最大长度
[Url]:验证属性是否为网址格式

注意:禁止在 DateTime 上使用 Range 特性来进行 JQuery 日期验证。因为不管填入的时间值在不在Range范围内,js验证都会提示错误。

2 在控制器进行验证

  1.         [HttpPost]
  2.         [ValidateAntiForgeryToken]
  3.         public async Task<IActionResult> Edit(int id, [Bind("ID,Title,ReleaseDate,Genre,Price,Rating")] Movie movie)
  4.         {
  5.             if (id != movie.ID)
  6.             {
  7.                 return NotFound();
  8.             }

  9.             if (ModelState.IsValid)
  10.             {
  11.                 try
  12.                 {
  13.                     _context.Update(movie);
  14.                     await _context.SaveChangesAsync();
  15.                 }
  16.                 catch (DbUpdateConcurrencyException)
  17.                 {
  18.                     if (!MovieExists(movie.ID))
  19.                     {
  20.                         return NotFound();
  21.                     }
  22.                     else
  23.                     {
  24.                         throw;
  25.                     }
  26.                 }
  27.                 return RedirectToAction(nameof(Index));
  28.             }
  29.             return View(movie);
  30.         }
复制代码
3 UI页面

  1. <div class="row">
  2.     <div class="col-md-4">
  3.         <form asp-action="Edit">
  4.             <div asp-validation-summary="ModelOnly" class="text-danger"></div>
  5.             <input type="hidden" asp-for="ID" />
  6.             <div class="form-group">
  7.                 <label asp-for="Title" class="control-label"></label>
  8.                 <input asp-for="Title" class="form-control" />
  9.                 <span asp-validation-for="Title" class="text-danger"></span>
  10.             </div>
  11.             <div class="form-group">
  12.                 <label asp-for="Rating" class="control-label"></label>
  13.                 <input asp-for="Rating" class="form-control" />
  14.                 <span asp-validation-for="Rating" class="text-danger"></span>
  15.             </div>
  16.             <div class="form-group">
  17.                 <label asp-for="ReleaseDate" class="control-label"></label>
  18.                 <input asp-for="ReleaseDate" class="form-control" />
  19.                 <span asp-validation-for="ReleaseDate" class="text-danger"></span>
  20.             </div>
  21.             <div class="form-group">
  22.                 <label asp-for="Genre" class="control-label"></label>
  23.                 <input asp-for="Genre" class="form-control" />
  24.                 <span asp-validation-for="Genre" class="text-danger"></span>
  25.             </div>
  26.             <div class="form-group">
  27.                 <label asp-for="Price" class="control-label"></label>
  28.                 <input asp-for="Price" class="form-control" />
  29.                 <span asp-validation-for="Price" class="text-danger"></span>
  30.             </div>
  31.             <div class="form-group">
  32.                 <input type="submit" value="Save" class="btn btn-default" />
  33.             </div>
  34.         </form>
  35.     </div>
  36. </div>
复制代码
微信截图_20191121104900.png

如图所示:放映日期提示错误,正是由于
DateTime 类型上使用 Range 导致的,所以禁止在DateTime 上使用 Range 。

5 自定义数据验证失败时的提示信息

校验特性上使用ErrorMessage属性

[StringLength(30,ErrorMessage = "Genre的长度不能超过30")]





上一篇:深入理解Redis
下一篇:Jquery 获取表单FORM所有元素进行AJAX提交
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2025-1-17 02:07

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表