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 ...
随机推荐
- YUV格式学习:YUV420P、YV12、NV12、NV21格式转换成RGB24(转载)
转自:http://www.latelee.org/my-study/yuv-learning-yuv420p-to-rgb24.html 对于YUV420的格式,网上有一大堆资料,这里就不说了.直奔 ...
- LeetCode: 448 Find All Numbers Disappeared in an Array(easy)
题目: Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice an ...
- SQL Server知识详解
1.SET NOCOUNT ON的作用: 作用:阻止在结果集中返回显示受T-SQL语句或则usp影响的行计数信息. 语法:SET NOCOUNT {ON | OFF} 详解:当SET ONCOUNT ...
- 为Docker容器设置静态IP
此文已由作者袁欢授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 创建docker容器 docker run -it --name=yh -h yh --net=none de ...
- 模型验证 IValidatableObject 无法进入 Validate 方法的原因
模型的属性的类型为 decimal 时无法进入 Validate 方法 public decimal Age { get; set; } 当把属性的类型改为可空类型时 则可以进入 Validate 方 ...
- 51nod1640 【最小生成树】
题意: 在一副图中,搞N-1条边,使得每个点都相连, 有多种可能的情况,所以求一种使得其中n-1条边的最大是所有可能的最小,然后并保证连接的n-1条边的权值总和最大 思路: 一开始没有看清题意,随便写 ...
- golang开发:(二)安装 Golang
当然了我们的安装都是在vagrant里面安装,vagrant ssh.不用虚拟机了,本机安装当然也可以. Mac 安装 访问下载地址,下载 go1.12.5.darwin-amd64.pkg,双击下载 ...
- JS实现购物车动态功能
整理了一下当时学js写的一些案例,觉得购物车功能在一般网站比较常见且基础,现在把它整理出来,需要的小伙伴可以参考一下. 该案例购物车主要功能如下: 1. 商品单选.全选.反选功能 2. 商品添加.删除 ...
- D. Pair Of Lines( Educational Codeforces Round 41 (Rated for Div. 2))
#include <vector> #include <iostream> #include <algorithm> using namespace std; ty ...
- [BZOJ5219]最长路径
Description 在Byteland一共有n个城市,编号依次为1到n,它们之间计划修建n(n-1)/2条单向道路,对于任意两个不同的点i和 j,在它们之间有且仅有一条单向道路,方向要么是i到j, ...