[十二] ASP.NET Core 中的模型绑定
Posted 长不大的大灰狼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[十二] ASP.NET Core 中的模型绑定相关的知识,希望对你有一定的参考价值。
模型绑定
1、模型绑定
模型绑定是将 HTTP 请求中的数据映射到控制器操作方法上对应的参数。
http://localhost:13380/home/details/2
,默认路由模板规则({controller = Home}/{action = Index}/{id?})路由将此请求发送到 HomeController 的 Details(int? id)操作方法上。
默认路由模板中的参数名称为id,而 Details(int? id)操作方法中的参数名称也为 id。因此,Http 请求的(http://localhost:13380/home/details/2
)URL 中 id 值为 2 ,将被映射到操作方法为Details(int? id)中 Id 参数。
(1)HTTP 请求数据
模型绑定将按以下指定的顺序在以下位置查找来自 HTTP 请求中的数据。
form values (表单中值)
Route values(路由中的值)
Query strings(查询字符串)
当提交表单时,表单中的值将映射到Create()操作方法中Student对象中的对应的参数信息。
public RedirectToActionResult Create(Student student)
{
Student newStudent = _studentRepository.Add(student);
return RedirectToAction("Details", new { id = newStudent.Id });
}
HttpGet 与 HttpPost
[HttpGet]
public ViewResult Create()
{
return View();
}
[HttpPost]
public RedirectToActionResult Create(Student student)
{
Student newStudent = _studentRepository.Add(student);
return RedirectToAction("Details", new { id = newStudent.Id });
}
2、ASP.NET Core 中的模型验证
要使Name字段成为必填字段,请在Student模型类的Name属性上添加Required属性。
///<summary>
///学生模型
///</summary>
public class Student
{
public int Id { get; set; }
[Required]
public string Name { get; set; }
public MajorEnum Major { get; set; }
public string Email { get; set; }
}
(1)ModelState.IsValid 属性验证
使用ModelState.IsValid 属性会检查验证是否失败或成功.
[HttpPost]
public IActionResult Create(Student student)
{
if (ModelState.IsValid)
{
Student newStudent = _studentRepository.Add(student);
return RedirectToAction("Details", new { id = newStudent.Id });
}
return View();
}
(2)在视图中显示模型验证错误
- asp-validation-for TagHelper 用于显示模型类的单个属性的验证消息。asp-validation-summary
TagHelper 用于显示验证错误的摘要信息。 - 显示与 Student 类的 Name 属性关联的验证错误,请在
<span>
元素上使用asp-validation-forTagHelper,如下所示。
<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"></span>
</div>
</div>
要显示所有验证错误的摘要,请在<div>
元素上使用 asp-validation-summary ,如下所示。
<div asp-validation-summary="All"></div>
(3)自定义模型验证错误消息
如果要将验证错误消息更改为"请输入名字",可以使用 Required 属性的 ErrorMessage 属性执行此操作,如下所示:
public class Student
{
public int Id { get; set; }
[Required(ErrorMessage = "请输入名字")]
public string Name { get; set; }
public MajorEnum Major { get; set; }
public string Email { get; set; }
}
ASP.NET Core 内置模型验证属性
public class Student
{
public int Id { get; set; }
[Required, MaxLength(50, ErrorMessage = "名字的长度不能超过50个字符")]
public string Name { get; set; }
public MajorEnum Major { get; set; }
[Display(Name = "电子邮件")]
[RegularExpression(@"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+$",
ErrorMessage = "邮箱的格式不正确")]
[Required]
public string Email { get; set; }
}
显示属性
如果您希望在视图中的标签显示 电子邮件,请使用Display属性
public class Student
{
public int Id { get; set; }
[Required]
public string Name { get; set; }
public MajorEnum Major { get; set; }
[Display(Name = "电子邮件")]
public string Email { get; set; }
}
以上是关于[十二] ASP.NET Core 中的模型绑定的主要内容,如果未能解决你的问题,请参考以下文章
模型绑定不适用于 ASP.NET Core 2 WebAPI 中的 POST 请求
ASP.NET Core 中的模型绑定将下划线映射到标题大小写属性名称
在 ASP.NET MVC Core 2 中使用 MetadataPropertyHandling 模型绑定 JSON 数据