Asp.Net Core 入门(十)—— 模型绑定和验证
模型绑定时将Http请求中的数据映射到控制器操作方法上对应的参数,操作方法中的参数可以是简单类型,如整形,字符串等,也可以是复杂类型,如Product,Order等。
Asp.Net Core MVC的模型绑定和Asp.Net MVC模型绑定相似,模型绑定将按下图指定的顺序查找来自http请求中的数据绑定到控制器操作方法对应的参数上。

同时,Asp.Net MVC Core绑定模型的时候同样也会进行模型的校验。那么,我们怎么给模型添加校验呢,其实也和Asp.Net MVC差不多。
首先我们在模型的属性上添加验证属性,Display属性为显示在页面上的该字段的信息。
/// <summary>
/// 学生模型
/// </summary>
public class Student
{
public int Id { get; set; } [Display(Name="姓名")]
[Required(ErrorMessage ="请输入名字")]
public string Name { get; set; } [Display(Name = "班级")]
[Required(ErrorMessage ="请输入班级")]
public ClassNameEnum? ClassName { get; set; } [Display(Name = "邮箱地址")]
[Required(ErrorMessage ="请输入邮箱地址")]
public string Email { get; set; }
}
一般的属性校验有:
Required 指定该字段是必填的
Range 指定允许的最小值和最大值
MinLength 指定字符串的最小长度
MaxLength 指定字符串的最大长度
Compare 比较模型的2个属性,例如比较Email和ComfirmEmail属性
RegularExpression 正则表达式,验证提供的值是否与正则表达式指定的模式匹配
其次,使用ModelState.IsValid属性验证属性是否绑定成功
if (ModelState.IsValid)
{
Student newStudent = _studentRepository.Add(student); return RedirectToAction("Details", new { id = newStudent.Id });
}
else
{
return View(student);
}
最后,使用asp-validation-for和asp-validation-summary tag helper 来显示错误信息
<div asp-validation-summary="All" class="text-danger"></div>
<div class="form-group row">
<label asp-for="Name" class="col-sm-2 col-form-label"></label>
<div class="col-sm-10">
<input asp-for="Name" class="form-control" placeholder="请输入名字" />
<span asp-validation-for="Name" class="text-danger"></span>
</div>
</div>
<div class="form-group row">
<label asp-for="Email" class="col-sm-2 col-form-label"></label>
<div class="col-sm-10">
<input asp-for="Email" class="form-control" placeholder="请输入邮箱" />
<span asp-validation-for="Email" class="text-danger"></span>
</div>
</div>
<div class="form-group row">
<label asp-for="ClassName" class="col-sm-2 col-form-label"></label>
<div class="col-sm-10">
<select asp-for="ClassName" asp-items="Html.GetEnumSelectList<ClassNameEnum>()">
<option value="" selected></option>
</select>
<span asp-validation-for="ClassName" class="text-danger"></span>
</div>
</div>
值得注意的是,在select标签的验证上,模型中有Required和无Required都会提示 The value '' is invalid.这是因为枚举ClassName里是int类型,而option里的value为“”,导致类型转化失败,我们可以在Student的ClassName设置为可空类型ClassNameEnum? 。
Asp.Net Core 入门(十)—— 模型绑定和验证的更多相关文章
- ASP.NET Core 中的模型绑定
微软官方文档:ASP.NET Core 中的模型绑定 Route 是通过MVC Route URL取值. 如:http://localhost:5000/Home/Index/2,id取出的值就会是2 ...
- ASP.NET Core MVC/WebAPi 模型绑定探索
前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...
- ASP.NET Core MVC/WebAPi 模型绑定探索 转载https://www.cnblogs.com/CreateMyself/p/6246977.html
前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...
- 【转】ASP.NET Core MVC/WebAPi 模型绑定探索
前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...
- 【ASP.NET Core】MVC模型绑定——实现同一个API方法兼容JSON和Form-data输入
在上一篇文章中,老周给大伙伴们大致说了下 MVC 下的模型绑定,今天咱们进行一下细化,先聊聊模型绑定中涉及到的一些组件对象. ------------------------------------- ...
- 【ASP.NET Core】MVC模型绑定:非规范正文内容的处理
本篇老周就和老伙伴们分享一下,对于客户端提交的不规范 Body 如何做模型绑定.不必多说,这种情况下,只能自定义 ModelBinder 了.而且最佳方案是不要注册为全局 Binder--毕竟这种特殊 ...
- 【ASP.NET Core】MVC模型绑定:自定义InputFormatter读取CSV内容
在上一篇文章中,老周介绍了用自定义 ModelBinder 的方式实现一个 API(或MVC操作方法)可以同时支持 JSON 格式和 Form-data 格式的数据正文.今天该轮到 InputForm ...
- ASP.NET Core 下自定义模型绑定,去除字符串类型前后的空格
效果图: 01 02 直接贴代码了: NoTrim public class NoTrimAttribute : Attribute { } 我们自定义的模型绑定提供程序 /// <summar ...
- ASP.NET Core MVC/WebAPi 模型绑定
public class Person { public string Name { get; set; } public string Address { get; set; } public in ...
随机推荐
- HDU - 1016 Prime Ring Problem 经典素数环
Prime Ring Problem A ring is compose of n circles as shown in diagram. Put natural number 1, 2, ..., ...
- QDUOJ LC的课后辅导 单调递增栈
LC的课后辅导 发布时间: 2015年9月19日 21:42 时间限制: 1000ms 内存限制: 256M 描述 有一天,LC给我们出了一道题,如图: 这个图形从左到右由若干个 宽为1 高不 ...
- jQuery获取table当前所在行
$("div tbody tr").click(function() { var rows = $(this).prevAll().length + 1;//行号 ...
- Linux环境下Nginx及负载均衡
Nginx 简介 Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器,同时也提供了 IMAP/POP3/SMTP 服务.前向代理作为客户端的代理,服务端只知道代理的 IP 地址而不知道客 ...
- E20180506-hm
更新: 2019/02/19 原来忘记分类,把此博文归入单词类 criterion n. 规范; (批评.判断等的) 标准,准则; criteria n. (批评.判断等的) 标准,准则( crit ...
- SCUT - 114 - 作业之数学篇 - 杜教筛
https://scut.online/p/114 \(A(n)=\sum\limits_{i=1}^{n} \frac{lcm(i,n)}{gcd(i,n)}\) \(=\sum\limits_{i ...
- ZOJ3359【阅读理解】
前言: 和队友一发入魂,很强势. 比赛中题目长的,就和队友一起读,这样比较快,然后还不会梦游,把点一句一句地搞出来. 思路: 在头5次,每次有人踢球就可能会输. 后面谁没进,对方进了救输. 代码: / ...
- Unity中资源动态加载的几种方式比较
http://blog.csdn.net/leonwei/article/details/18406103 初学Unity的过程中,会发现打包发布程序后,unity会自动将场景需要引用到的资源打包到安 ...
- [Xcode 实际操作]九、实用进阶-(29)为App添加IAP(支付方式)内购项目
目录:[Swift]Xcode实际操作 首先请阅读:[Xcode10 实际操作]九.实用进阶-(28)在iTunes Connect(苹果商店的管理后台)中创建一个新的新的APP 本文将演示如何给刚刚 ...
- app发布证书、真机调试证书、测试证书、推送证书详细过程
原文网址: http://www.cnblogs.com/cxbblog/p/4028159.html 一:发布证书 遵旨:哪个开发者的哪台电脑要发布哪个app (这句话可以多读几遍) 通过上边的遵旨 ...