[十二] 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; }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值