[十二] 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 中的模型绑定

模型绑定不适用于 ASP.NET Core 2 WebAPI 中的 POST 请求

ASP.NET Core 中的模型绑定将下划线映射到标题大小写属性名称

ASP.NET Core 1 Web API 模型绑定数组

在 ASP.NET MVC Core 2 中使用 MetadataPropertyHandling 模型绑定 JSON 数据

ASP.NET Core 模型绑定错误消息本地化